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

时间:2011-12-14 12:29:39

标签: javascript html css

对于我的用户个人资料,我将让他们插入HTML代码,这些代码将显示在他们的个人资料中。

我们需要在保存个人资料时手动删除任何特殊标记吗?

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

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

6 个答案:

答案 0 :(得分:3)

应该不惜一切代价避免使用applet,embed,object,script和iframe。

a和img可能会有问题,因为它们允许链接到场外资源。它们还可以包含javascript:urls

避免让用户将任何头标签输入到身体的cotnent中。风格,链接,元,标题等

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

已添加

表格和他们的孩子也可能要避免,因为他们可以用来欺骗用户输入被其他网站收集的信息。

我建议在标记和属性方面使用白名单策略而不是黑名单,因为它更容易错过黑名单。随着HTML5越来越受到关注,还有一大堆新的标签和属性需要注意。

答案 1 :(得分:2)

几乎所有东西。你不知道人们没有这样做:

<img onload="hax" />

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

答案 2 :(得分:2)

img似乎是另一个显而易见的问题。但我同意Lollero,不要考虑禁止什么,而是考虑允许。请记住,它不仅仅是标签,还包括属性。您希望构建标签的白名单以及要在其上允许的属性。

FWIW,这里是Wordpress默认使用评论的白名单(呃,至少我已经把它的相当过时的安装了):

  • a
    • href - 请务必仅允许您允许的协议,例如,可能不允许javascript:伪协议。
    • title
  • abbr
    • title
  • acronym
    • title
  • b
  • blockquote
    • cite
  • cite
  • code
  • del
    • datetime
  • em
  • i
  • q
    • cite
  • strike
  • strong

(您可以在$allowedTags中的wp-includes/kses.php变量中找到此列表。)我认为这是相关的,因为Wordpress是一个非常受欢迎的平台。

答案 3 :(得分:2)

基本上删除所有标记和属性 ,除了 无害您想要允许的内容,pstrongbemulollidivspanh2,{ {1}},h3u

如果您允许i代码,请务必不要删除imgaltsrc属性。

如果您允许title代码,请务必不要删除a属性。

考虑到这一点,您的支票代码中可能的标签和属性列表几乎是无穷无尽的

答案 4 :(得分:1)

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

如果您使用的是服务器端语言,请确保还要清理任何用户输入。

您可能还想了解XSS攻击,只是为了警惕任何恶意废话:http://ha.ckers.org/xss.html

答案 5 :(得分:1)

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

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