【问题标题】:How to sanitize HTML code to prevent XSS attacks in Java or JSP?如何清理 HTML 代码以防止 Java 或 JSP 中的 XSS 攻击?
【发布时间】:2011-04-04 23:18:43
【问题描述】:

我正在编写一个基于 servlet 的应用程序,我需要在其中提供一个消息传递系统。我很着急,所以我选择CKEditor提供编辑功能,我目前将生成的html直接插入显示所有消息的网页中(消息存储在MySQL数据库中,仅供参考)。 CKEditor 已经根据白名单过滤了 HTML,但是用户仍然可以通过 POST 请求注入恶意代码,所以这还不够。

已经有一个很好的库来通过过滤 HTML 标签来防止 XSS 攻击,但是它是用 PHP 编写的:HTML Purifier

那么,有没有类似的成熟的库可以用在Java中? 基于白名单的简单字符串替换似乎还不够,因为我也想过滤格式错误的标签(这可能会改变显示消息的页面的设计) .

如果没有,那我应该如何进行? XML 解析器似乎有点矫枉过正。

注意:关于 SO 有很多关于此的问题,但所有答案均指过滤所有 HTML 标签:我想保留有效的格式标签。

【问题讨论】:

  • 替代方案:使用 BBCode 进行用户输入,有很好的编辑器。

标签: java jsp xss


【解决方案1】:

如果没有任何现成的选项看起来足够,Google Code 上有一系列关于 XSS 和攻击预防的优秀文章。如果您最终走上这条路,它应该提供大量信息可供使用。

【讨论】:

    【解决方案2】:

    我建议为此使用Jsoup。这是来自its site 的相关性摘录。

    Sanitize untrusted HTML

    问题

    您希望允许不受信任的用户提供 HTML 用于您网站上的输出(例如,作为评论提交)。您需要清理此 HTML 以避免cross-site scripting (XSS) 攻击。

    解决方案

    使用 jsoup HTML CleanerWhitelist 指定的配置。

    String unsafe = 
          "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
    String safe = Jsoup.clean(unsafe, Whitelist.basic());
          // now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>
    

    Jsoup 还提供了更多的优势。另见Pros and Cons of HTML parsers in Java

    【讨论】:

      【解决方案3】:

      您应该使用AntiSamy。 (That's what I did)

      【讨论】:

        猜你喜欢
        • 2021-12-08
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2018-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多