我正在尝试使用 jsoup 来清理从客户端中的所见即所得发布的 html(碰巧是 tinymce)
relaxed 模式似乎不够宽松,因为默认情况下它会去除 span 元素和任何样式属性。
例如
String text = "<p style="color: #ff0000;">foobar</p>";
Jsoup.clean(text, Whitelist.relaxed());
会输出
<p>foobar</p>
和
<span>foobar</span>
将被完全删除。
有没有人有过使用Jsoup杜绝XSS攻击的可能性,并且仍然允许上述元素和属性通过的经验?
编辑:我已经完成了以下内容。谁能告诉我这有多脆弱?
Jsoup.clean(pitch, Whitelist.relaxed().addTags("span").addAttributes(":all","style"));
编辑 2:有人在生产中使用过 owasp 库吗?它看起来可以在保持正确样式的同时正确 sanitizer 。 OWASP
最佳答案
貌似可以利用style属性实现XSS..
XSS attacks and style attributes
http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
http://www.acunetix.com/websitesecurity/cross-site-scripting.htm (查看 DIV 部分,我认为它对 SPAN 的作用相同)
这是我为测试上一个链接中的示例而编写的一些代码..
text = "<span style=\"width: expression(alert('XSS'));\">";
System.out.println(Jsoup.clean(text, org.jsoup.safety.Whitelist.relaxed().addTags("span").addAttributes(":all","style")));
它准确地输出输入。如果那确实是一个 XSS vector ,那么您仍然有麻烦。
关于java - jsoup 白名单放松模式对于所见即所得编辑器来说过于严格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213189/