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

标签 java jsp xss

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

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

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

如果没有,那么我应该如何进行? XML 解析器似乎有点大材小用。

注意:SO 上有很多关于此问题的问题,但所有答案都涉及过滤所有 HTML 标记:我想保留有效的格式标记。

最佳答案

我建议使用Jsoup为了这。以下是 its site 的相关摘录.

Sanitize untrusted HTML

Problem

You want to allow untrusted users to supply HTML for output on your website (e.g. as comment submission). You need to clean this HTML to avoid cross-site scripting (XSS) attacks.

Solution

Use the jsoup HTML Cleaner with a configuration specified by a Whitelist.

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 .

关于java - 如何清理 HTML 代码以防止 Java 或 JSP 中的 XSS 攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23752099/

相关文章:

java - Json类型不匹配: Cannot convert to string

javascript - 如何使用 JSONP 克服 XSS 问题?

java - 这种情况下是否可以进行XSS?

java - 使用 JDBC 在 KDB 数据库中执行查询

java - 如何在 Hibernate 中执行非多态 HQL 查询?

java - 向 GridBagLayout 行添加边框

java - 我如何连接两个用户,以便他们可以使用 J2EE 网络技术(JSP、Spring 等)共享公共(public)对象(游戏实例)?

javascript - 如何使用 angularjs 变量在jsp页面中动态更改脚本标签的路径? (可能重复)

java - 如何在 JSP 中不使用 scriptlet 读取附件消息?

jsf - 是否有标准的 JSF 方式或开源库允许输出转义文本但 _with_ html 格式?