如何修复Java Webapp中的地方性XSS漏洞

时间:2013-03-06 11:00:25

标签: java jsp struts xss html-sanitizing

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

即使不需要,JSP中的大多数<bean:write>都有filter="false",可能是因为开发人员盲目地复制现有代码。 <bean:write>是用于输出JSP变量的Struts标记,并且在指定filter="false"时它不执行HTML转义(因此filter="false"类似于<c:out>属性{{1 }})。这意味着应用程序容易受到XSS攻击,因为其中一些escapeXml="false"正在输出用户输入。

删除<bean:write filter="false">不是一种选择,因为在某些情况下,应用程序允许用户使用TinyMCE文本区域输入HTML,因此我们需要在某些情况下输出原始HTML以保留用户 - 进入格式化(尽管我们仍应该清理用户输入的HTML以删除脚本)。

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

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

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

我有两个主要问题:

1)我们提出的方法是否可以解决由secure:write引起的XSS漏洞?

2)在显示内容时,是否有人可以推荐用于HTML清理的库,即速度足够快,不会显着影响页面呈现性能?有没有人使用过AntiSamy或者owasp-java-html-sanitizer来做类似的事情?

1 个答案:

答案 0 :(得分:0)

  

1)我们提出的方法是否可以解决由filter =“false”引起的XSS漏洞?

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

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

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

  

2)在显示内容时,是否有人可以推荐用于HTML清理的库,即速度足够快,不会显着影响页面呈现性能?有没有人使用过AntiSamy或者owasp-java-html-sanitizer来做类似的事情?

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

  

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