如果我允许用户为他们的“个人资料”编写HTML,我应该禁止/移除哪些元素以保护其他用户的安全?
对于我的用户的个人资料,我将让他们插入HTML代码,这些代码将显示在他们的个人资料中。如果我允许用户为他们的“个人资料”编写HTML,我应该禁止/移除哪些元素以保护其他用户的安全?
当他们保存个人资料时,是否需要手动删除任何特殊标签?
除了<script>
标签,还有什么可能是危险的?
还有什么可能是“危险的”?
小程序,嵌入,对象,脚本和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是一个非常受欢迎的平台,因此它具有相关性。
基本上删除所有标签和属性的除了要允许像无害的,p
,strong
,b
,em
,ul
,ol
,li
,div
,span
,h2
,h3
,u
,i
如果您允许img
标记,请务必不要删除alt
,src
和title
属性。
如果您允许a
标记,请确保不要删除href
属性。
考虑到这一点,可能的标签和属性列表将几乎是无限在您的检查代码中。
如果您采取不允许任何标签的观点,然后想想什么可以允许/人们可能需要什么?哇..没有正确阅读这个问题.. _手动删除_? ..哇.. – Joonas 2011-12-14 12:32:44
@Lollero好的,手动删除LOL – 2011-12-14 12:37:30