XSS安全 - 删除所有脚本,允许其他所有脚本

时间:2012-05-15 21:51:35

标签: javascript html xss sanitization

我们正在网页上显示第三方HTML,这些HTML应正确呈现大部分内容,包括链接和图片。我们基本上想要对所有脚本进行清理,即

<script>...</script>

但事情可以变得非常有创意。脚本可以在“脚本”标记之外显示的简单情况是

<a href="javascript:alert('XSS')"> 

我们肯定需要允许链接。

事实上,我相信很多人都知道,这个问题非常残酷:http://ha.ckers.org/xss.html

如果您处于用户向您的网站发布评论的情况,您可以逃脱所有HTML,或者可以转义除<em><i>,{{1之外的所有HTML }和<u>。在我的情况下,我们需要允许所有HTML,但禁用所有脚本,这是更难,但不是一个罕见的要求。是否有支持此级别的HTML-permissiveness和XSS-safety的库或工具?

语言,按优先顺序排列:Python,PHP,Java,C / C ++。

4 个答案:

答案 0 :(得分:0)

您可以使用javascript(或jQuery)在页面提交之前检查您的href具有使用正则表达式的任何<a>标记的形式http://。

答案 1 :(得分:0)

AFAIK,该网站仅列出整个XSS注射。类似于strip_tags的方法不适用于碎片(多点)注射,我认为这种注射更隐蔽。您可以做的最好的事情是在将字符显示到页面之前使用PHP's htmlentities等字符对其进行编码。但这会阻止HTML显示。

您可以执行其他标记,例如论坛如何执行(具有[code][/code]语法的标记)。还可以考虑使用Markdown,这是StackOverflow中使用的相同编辑器,如果你只需要文本格式化,它很容易使用。

答案 2 :(得分:0)

您是否考虑过使用PHP框架CodeIgnitor?

有一个安全类,其中包含xss_clean()函数以及更多可以非常紧密地处理您需求的安全类。

http://codeigniter.com/user_guide/libraries/security.html

答案 3 :(得分:0)

我建议您可以找到最强大的XSS预防措施。一般来说,最好的方法是将您想要允许的元素和属性(和值)列入白名单,而不是将您不允许的元素和属性列入黑名单。

我只能在HTML Purifier中提供基于PHP的解决方案,除了安全性之外,它还有助于确保您的标记有效(非常适合用户提交的HTML代码段)。

我看到你找到了http://ha.ckers.org/ -  我还建议使用OWASP(Open Web Application Security Project)作为资源。