如果我允许用户为他们的“配置文件”编写HTML,我应该禁止/删除哪些元素以保证其他用户的安全

If I allow users to write HTML for their "profile", what elements should I disallow/remove to keep it safe for other users?

本文关键字:用户 配置文件 删除 禁止 元素 安全 其他 我应该 HTML 许用户 编写      更新时间:2023-09-26

对于我的用户配置文件,我将让他们插入HTML代码,该代码将显示在他们的配置文件上。

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

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

还有什么是"危险的"?

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

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

避免让用户在正文内容中输入任何标题标签。Style, link, meta, title等

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

编辑添加:

表单和它们的子表单也可能是需要避免的,因为它们可以被用来欺骗用户输入信息,而这些信息会被其他网站收集。

当涉及到标签和属性时,我建议使用白名单策略而不是黑名单,因为黑名单更容易错过一些东西。此外,随着HTML5越来越受关注,我们还需要注意大量的新标签和属性。

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

<img onload="hax" />

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

img似乎是另一个明显的例子。但我同意Lollero的观点,不要考虑不允许什么,而是考虑允许什么。记住,不仅仅是标签,还有属性。你想建立一个白名单的标签和属性,你想允许在他们。

顺便说一句,这是Wordpress默认使用的评论白名单(呃,至少是我手头上相当过时的安装):

  • a
    • href -确保只允许你想允许的协议,例如,可能不是javascript:伪协议。
    • title
  • abbr
    • title
  • acronym
    • title
  • b
  • blockquote
    • 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, srctitle属性。

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

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

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

如果您使用的是服务器端语言,请确保也对任何用户输入进行了消毒。

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

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

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