2

我正在开发一个已有多年历史的 Java Web 应用程序。

<bean:write>JSP 中的大多数sfilter="false"甚至在不需要时都有,这可能是因为开发人员盲目地复制现有代码。<bean:write>是Struts标签输出一个JSP变量,filter="false"指定时不做HTML转义(所以和属性filter="false"类似)。这意味着应用程序容易受到 XSS 攻击,因为其中一些正在输出用户输入。<c:out>escapeXml="false"<bean:write filter="false">

一揽子删除filter="false"不是一个选项,因为在某些情况下,应用程序允许用户使用 TinyMCE 文本区域输入 HTML,因此在某些情况下我们确实需要输出原始 HTML 以保留用户输入的格式(尽管我们仍然应该清理用户输入的 HTML 以删除脚本)。

代码中有数千个filter="false"s,因此审核每个 s 以确定是否需要它需要太长时间。

我们正在考虑做的是制作我们自己的bean:write标签版本,比如说secure:write,并在我们的 JSP 中使用 secure:write 进行 bean:write 的全局查找/替换。secure:write指定时将从输出中删除脚本filter="false"。在此更改之后,用户仍然可以将格式化 HTML 输出到他们不应该真正能够输出的位置,但只要修复了 XSS 漏洞,我们暂时不担心这一点。

我们想使用一个库来实现secure:write标签中的脚本剥离,我们一直在查看https://www.owasp.org/index.php/Category:OWASP_AntiSamy_Projecthttps://code.google.com/ p/owasp-java-html-sanitizer/。两者看起来都能够清理 HTML,尽管 AntiSamy 看起来像是用于在进入应用程序而不是退出时清理 HTML,并且由于数据的输出频率高于输入数据,因此我们是担心secure:write通过它运行我们所有的输出可能会很慢。

我有两个主要问题:

1) 我们提出的方法是否可以修复由以下原因引起的 XSS 漏洞filter="false"

2) 任何人都可以推荐一个在显示内容时用于 HTML 清理的库,即它的速度足够快,不会显着影响页面渲染性能吗?有没有人用过 AntiSamy 或 owasp-java-html-sanitizer 来做类似的事情?

4

1 回答 1

0

1) 我们提出的方法能否修复由 filter="false" 引起的 XSS 漏洞?

这听起来绝对像是一种可以减少攻击面的改进,但这还不够。一旦攻击者无法再注入<script>doEvil()</script>,他们就会专注于javascript:doEvil()在预期 URL 的位置注入,因此您还需要强化 URL 注入的位置。

如果您使用的是 XSS 扫描程序,我会按照您的描述进行操作,然后重新运行您的扫描程序,确保它测试注入的 javascript URL。

一旦 URL 被锁定,您应该审核对样式属性或元素和事件处理程序属性的任何写入。

2) 任何人都可以推荐一个在显示内容时用于 HTML 清理的库,即它的速度足够快,不会显着影响页面渲染性能吗?有没有人用过 AntiSamy 或 owasp-java-html-sanitizer 来做类似的事情?

无耻插件:https ://code.google.com/p/owasp-java-html-sanitizer/

一个用 Java 编写的快速且易于配置的 HTML Sanitizer,它允许您在 Web 应用程序中包含由第三方创作的 HTML,同时防止 XSS。

于 2013-03-26T03:45:20.807 回答