如果我允许用户为他们的“配置文件”编写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代码,该代码将显示在他们的配置文件上。
是否有任何特殊的标签,我需要手动删除,当他们保存他们的个人资料?
除了<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
, src
和title
属性。
如果您允许a
标签,请确保不要删除href
属性。
考虑到这一点,可能的标签和属性列表将几乎是无尽的在你的检查代码
假设您不使用PHP或其他服务器端处理,我担心的唯一其他元素是iframe, object, and applet
如果您使用的是服务器端语言,请确保也对任何用户输入进行了消毒。
您可能还想阅读XSS攻击,只是为了警惕任何恶意废话:http://ha.ckers.org/xss.html
http://html5sec.org/是一个很好的列表,可以用来执行Javascript。
最好的方法是使用白名单:删除所有的东西,除了那些绝对安全的,比如一些基本的样式元素;如果可能,不要允许任何属性
- SoundCloud API-基于系统中的ID创建用户配置文件
- 通过oauth令牌passport.js访问用户配置文件
- mongodb用户配置文件添加输入时出现问题
- MEANJS用户配置文件功能
- 用户配置文件的选项卡导航
- 上传后更新用户配置文件图片
- 仅使用访问令牌在节点中获取Google+用户配置文件
- 根据用户配置文件中的数组在集合中查找
- AngularJS加载单个用户配置文件
- PhoneGap 应用程序中的用户配置文件
- 用户配置文件自定义 css
- Phonegap插件:检索用户配置文件,电子邮件和Gmail
- 余烬简单身份验证在会话中保存用户配置文件
- 兴访问用户配置文件 API
- 添加当前用户配置文件metro.js的文档
- 在MeteorJs中,我如何将查询字符串中的推荐代码添加到用户配置文件中
- hta文件中的javascript用户配置文件相对路径
- Django 将用户配置文件数据从客户端传递到服务器
- 通过ajax更新用户配置文件
- 用户配置文件信息在每次页面刷新后重置(使用Hello.js)