如果我允许用​​户为他们的“个人资料”编写HTML,我应该禁止/移除哪些元素以保护其他用户的安全?

如果我允许用​​户为他们的“个人资料”编写HTML,我应该禁止/移除哪些元素以保护其他用户的安全?

问题描述:

对于我的用户的个人资料,我将让他们插入HTML代码,这些代码将显示在他们的个人资料中。如果我允许用​​户为他们的“个人资料”编写HTML,我应该禁止/移除哪些元素以保护其他用户的安全?

当他们保存个人资料时,是否需要手动删除任何特殊标签?

除了<script>标签,还有什么可能是危险的?

还有什么可能是“危险的”?

+5

如果您采取不允许任何标签的观点,然后想想什么可以允许/人们可能需要什么?哇..没有正确阅读这个问题.. _手动删除_? ..哇.. – Joonas 2011-12-14 12:32:44

+1

@Lollero好的,手动删除LOL – 2011-12-14 12:37:30

+1

,。 ;) – graphicdivine 2011-12-14 12:38:16

小程序,嵌入,对象,脚本和iframe应该是不惜一切代价避免。

a和img可能会有问题,因为它们允许链接到非现场资源。它们也可以包含javascript:网址

避免让用户输入任何头标签到body中。风格,链接,元,标题等

你还必须小心的属性。不要允许任何以on开头的属性,因为它们是javascript事件绑定。您还需要检查javascript:和data:url的任何URL属性。

编辑补充

形式和他们的孩子也可能是一些避免,因为它们可以被用来欺骗用户进入该被通过其他网站收集的信息。

对于标签和属性,我建议使用白名单策略而不是黑名单,因为使用黑名单错过某些内容要容易得多。另外,随着HTML5的发展,有大量新标签和属性值得注意。

假设你没有使用PHP或其他服务器端处理,唯一的其他元素我担心的是iframe, object, and applet

如果您使用的是服务器端语言,只要确保消毒也任何用户输入。

您还可能要对XSS攻击读了,只是要提防任何恶意的废话:http://ha.ckers.org/xss.html

几乎一切。你不知道的人不这样做的:

<img onload="hax" /> 

此外,您必须验证它的服务器端,而不是客户端

http://html5sec.org/是什么可以用来执行Javascript的好列表。

最好的方法是使用白名单:除了绝对安全的东西,像几个基本的样式元素一样,删除所有东西;如果可能的话,不要允许任何属性。

img似乎是另一个明显的。但我同意Lollero,不要以为什么要禁止,但在允许。请记住,这不仅仅是标签,还有属性。你想建立一个标签白名单和你想允许的属性。

FWIW,下面是WordPress的默认(呃,至少还算外的日期安装的是我有得心应手)使用征求意见的白名单:

  • a
    • href - 是肯定只允许你想允许的协议,例如,可能不是伪协议的javascript:
    • title
  • abbr
    • title
  • acronym
    • title
  • b
    • cite
  • cite
  • code
  • del
    • datetime
  • em
  • i
  • q
    • cite
  • strike
  • strong

(您可以在此wp-includes/kses.php列表中$allowedTags变量)。我科幻由于Wordpress是一个非常受欢迎的平台,因此它具有相关性。

基本上删除所有标签和属性的除了要允许像无害的,pstrongbemulollidivspanh2h3ui

如果您允许img标记,请务必不要删除altsrctitle属性。

如果您允许a标记,请确保不要删除href属性。

考虑到这一点,可能的标签和属性列表将几乎是无限在您的检查代码中。