Wil*_*zyr 24 html java xss sanitization
我正在寻找class/util等来清理HTML代码,即删除危险的标签,属性和值以避免XSS和类似的攻击.
我从富文本编辑器(例如TinyMCE)获取html代码,但它可以通过恶意方式发送,省略TinyMCE验证("异地提交的数据").
在PHP中有什么像InputFilter一样简单易用吗?我能想象的完美解决方案就是这样(假设清理程序封装在HtmlSanitizer类中):
String unsanitized = "...<...>..."; // some potentially
// dangerous html here on input
HtmlSanitizer sat = new HtmlSanitizer(); // sanitizer util class created
String sanitized = sat.sanitize(unsanitized); // voila - sanitized is safe...
Run Code Online (Sandbox Code Playgroud)
更新 - 更简单的解决方案,越多越好!小的util类对其他库/框架的外部依赖性尽可能小 - 对我来说是最好的.
那个怎么样?
Sal*_*ack 23
您可以尝试使用OWASP Java HTML Sanitizer.它使用起来非常简单.
PolicyFactory policy = new HtmlPolicyBuilder()
.allowElements("a")
.allowUrlProtocols("https")
.allowAttributes("href").onElements("a")
.requireRelNofollowOnLinks()
.build();
String safeHTML = policy.sanitize(untrustedHTML);
Run Code Online (Sandbox Code Playgroud)
Vin*_*lds 13
您可以使用OWASP ESAPI for Java,它是为执行此类操作而构建的安全库.
它不仅具有HTML编码器,还具有执行JavaScript,CSS和URL编码的编码器.ESAPI的样本用途可以在OWASP出版的XSS预防备忘单中找到.
您可以使用OWASP AntiSamy项目来定义一个站点策略,该策略说明用户提交的内容中允许的内容.网站策略稍后可用于获取显示的"干净"HTML.您可以在AntiSamy下载页面上找到示例 TinyMCE策略文件.
小智 9
感谢@Saljack 的回答。只是为了详细说明OWASP Java HTML Sanitizer。它对我来说效果很好(很快)。我刚刚在我的 Maven 项目的 pom.xml 中添加了以下内容:
<dependency>
<groupId>com.googlecode.owasp-java-html-sanitizer</groupId>
<artifactId>owasp-java-html-sanitizer</artifactId>
<version>20150501.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
检查这里的最新版本。
然后我添加了这个功能进行消毒:
private String sanitizeHTML(String untrustedHTML){
PolicyFactory policy = new HtmlPolicyBuilder()
.allowAttributes("src").onElements("img")
.allowAttributes("href").onElements("a")
.allowStandardUrlProtocols()
.allowElements(
"a", "img"
).toFactory();
return policy.sanitize(untrustedHTML);
}
Run Code Online (Sandbox Code Playgroud)
可以通过扩展 allowElements 方法中的逗号分隔参数来添加更多标签。
只需在传递 bean 之前添加此行以保存数据:
bean.setHtml(sanitizeHTML(bean.getHtml()));
Run Code Online (Sandbox Code Playgroud)
就是这样!
对于更复杂的逻辑,这个库非常灵活,可以处理更复杂的清理实现。
HTML转义输入非常有效.但在某些情况下,业务规则可能要求您不要逃避HTML.使用REGEX不适合任务,并且很难找到使用它的好解决方案.
我找到的最佳解决方案是使用:http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer
它使用提供的输入构建DOM树,并过滤白名单不能预先允许的任何元素.API还具有其他用于清理html的功能.
它也可以用于javax.validation @SafeHtml(whitelistType =,additionalTags =)