当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Java中清理HTML代码以防止XSS攻击?》经验,为你挑选了3个好方法。

我正在寻找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...

更新 - 更简单的解决方案,越多越好!小的util类对其他库/框架的外部依赖性尽可能小 - 对我来说是最好的.


那个怎么样?



1> Saljack..:

您可以尝试使用OWASP Java HTML Sanitizer.它使用起来非常简单.

PolicyFactory policy = new HtmlPolicyBuilder()
    .allowElements("a")
    .allowUrlProtocols("https")
    .allowAttributes("href").onElements("a")
    .requireRelNofollowOnLinks()
    .build();

String safeHTML = policy.sanitize(untrustedHTML);



2> Vineet Reyno..:

您可以使用OWASP ESAPI for Java,它是为执行此类操作而构建的安全库.

它不仅具有HTML编码器,还具有执行JavaScript,CSS和URL编码的编码器.ESAPI的样本用途可以在OWASP出版的XSS预防备忘单中找到.

您可以使用OWASP AntiSamy项目来定义一个站点策略,该策略说明用户提交的内容中允许的内容.网站策略稍后可用于获取显示的"干净"HTML.您可以在AntiSamy下载页面上找到示例 TinyMCE策略文件.


Fyi,[OWASP Java HTML Sanitizer](http://code.google.com/p/owasp-java-html-sanitizer/)旨在为AntiSamy提供更高效,更容易配置的替代方案.
我不确定你重建项目架构的意思.AntiSamy通过允许将文本编辑器输入馈送到由站点策略驱动的过滤库,完全符合您的要求.

3> eduardohl..:

HTML转义输入非常有效.但在某些情况下,业务规则可能要求您不要逃避HTML.使用REGEX不适合任务,并且很难找到使用它的好解决方案.

我找到的最佳解决方案是使用:http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

它使用提供的输入构建DOM树,并过滤白名单不能预先允许的任何元素.API还具有其他用于清理html的功能.

它也可以用于javax.validation @SafeHtml(whitelistType =,additionalTags =)

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有