当前位置:  开发笔记 > 后端 > 正文

从请求中接受预定义的一组无害HTML标记有多安全?

如何解决《从请求中接受预定义的一组无害HTML标记有多安全?》经验,为你挑选了1个好方法。

我作为Web开发人员学到的第一件事就是永远不会接受来自客户端的任何HTML.(也许只有我对它进行HTML编码.)
我使用输出HTML的WYSIWYG编辑器(TinyMCE).到目前为止,我只在管理页面上使用它,但现在我也想在论坛上使用它.它有一个BBCode模块,但似乎不完整.(BBCode本身可能不支持我想要的所有内容.)

所以,这是我的想法:

我允许客户端直接POST一些HTML代码.然后,我检查代码的完整性(良好格式)并删除所有基于预定义的允许标记和样式集不允许的标记,属性和CSS规则.
显然我会允许我使用的TinyMCE功能子集可以输出的东西.

我会允许以下标签:
span,sub,sup,a,p,ul,ol,li,img,strong,em,br

具有以下属性:
style(一切),href以及title(对于a),altsrc(对img)

而下面的CSS规则:
color,font,font-size,font-weight,font-style,text-decoration

这些内容涵盖了格式化所需的所有内容,并且(据我所知)不会带来任何安全风险.基本上,良好的执行和缺乏任何布局样式可以防止任何人伤害网站的布局.禁止脚本标记和类似内容会阻止XSS.
(一个例外:也许我应该允许width/ height在图像的预定义范围内.)

其他优点:这些东西可以节省我编写/寻找BBCode-Html转换器的需要.

你怎么看?
这是安全的事吗?

(正如我所见,StackOverflow还允许在"关于我"字段中使用一些基本的HTML,所以我认为我不是第一个实现它的人.)

编辑:

我找到了这个答案,解释了如何相当容易地做到这一点.
当然,没有人应该考虑使用正则表达式.

问题本身与任何语言或技术无关,但如果您想知道,我在ASP.NET中编写此应用程序.



1> BalusC..:

目前还不清楚你正在使用或正在使用哪种编程语言,但在Java中有Jsoup,它是一个非常漂亮的HTML解析器API,其中包含基于HTML标签和属性的可自定义白名单的HTML清理器(遗憾的是,自那以后没有CSS规则)这完全超出了HTML解析器的范围.以下是其网站的相关摘录.

清理不受信任的HTML

问题

您希望允许不受信任的用户为您网站上的输出提供HTML(例如,作为评论提交).您需要清理此HTML以避免跨站点脚本(XSS)攻击.

将jsoup HTML Cleaner与a指定的配置一起使用Whitelist.

String unsafe = 
      "

Link

"; String safe = Jsoup.clean(unsafe, Whitelist.basic()); // now:

Link

Whitelist类本身包含几个个预定义白名单可能是有用的,比如Whitelist#basic()Whitelist#relaxed().

对于.NET,顺便提一下名为NSoup的Jsoup端口

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有