如何清理HTML代码以防止Java或JSP中的XSS攻击?

如何清理HTML代码以防止Java或JSP中的XSS攻击?,java,jsp,xss,Java,Jsp,Xss,我正在编写一个基于servlet的应用程序,其中需要提供一个消息传递系统。我很忙,所以我选择提供编辑功能,目前我直接在网页中插入生成的html,显示所有消息。消息存储在MySQL数据库中,仅供参考。CKEditor已经基于白名单过滤HTML,但是用户仍然可以通过POST请求注入恶意代码,所以这还不够 已经有一个很好的库可以通过过滤HTML标记来防止XSS攻击,但它是用PHP编写的: 那么,有没有类似的成熟库可以在Java中使用呢? 基于白名单的简单字符串替换似乎不够,因为我也想过滤格式错误的标记

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

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

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

如果没有,那么我应该如何继续?XML解析器似乎有些过分

注意:关于这一点有很多问题,但所有答案都涉及筛选所有HTML标记:我想保留有效的格式标记。

您应该使用

我建议你用这个。这是一篇文章的相关摘录

问题 您希望允许不受信任的用户在您的网站上提供HTML输出,例如作为评论提交。您需要清除此HTML以避免XSS攻击

解决方案 将jsoup HTML与指定的配置一起使用


Jsoup还提供了更多的优势。另请参见。

如果现成的选项似乎都不够的话,那么现在有一系列关于XSS和攻击预防的优秀文章。如果你最终走上了这条路,它应该提供大量的信息来处理。

备选方案:使用BBCode进行用户输入,有很好的编辑器来处理。
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>