【问题标题】:How to fix endemic XSS vulnerabilities in a Java webapp如何修复 Java webapp 中的地方性 XSS 漏洞
【发布时间】:2013-03-06 11:00:25
【问题描述】:

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

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

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

代码中有数以千计的filter="false"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) 我们提出的方法能否修复由filter="false" 引起的 XSS 漏洞?

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

【问题讨论】:

    标签: java jsp struts xss html-sanitizing


    【解决方案1】:

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

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

    【讨论】:

    • 我们已经选择了 owasp-java-html-sanitizer :-) 开箱即用的体验给我留下了深刻的印象 - make benchamrkmake runtests 无需我配置任何设置即可工作!我们正在使用基于 eBay 的策略,因为我们希望允许大多数 HTML 通过。感谢您就其他潜在漏洞提出建议。
    • @frankoid,很高兴你喜欢它。顺便说一句,html-contextual-autoescaper-java 旨在进行上下文推断和消毒剂选择。它在 Google Apps Scripts 中实时运行,我有一个集成了它的 Jasper 破解版,但它还不是 JSP 的直接替代品。
    猜你喜欢
    • 1970-01-01
    • 2014-12-25
    • 2023-03-10
    • 1970-01-01
    • 2017-10-23
    • 2023-04-07
    • 1970-01-01
    • 2012-06-08
    • 2021-09-03
    相关资源
    最近更新 更多