更新了不良术语
我正在查看JSoup和OWASP Java HTML sanitizer project。我通过清理传递给API层的用户输入来对防止XSS攻击的这种工具感兴趣。 OWASP项目说
"通过95%以上的AntiSamy单元测试以及更多。"
但是,它并没有告诉我自己哪里可以看到这些测试。这些测试涵盖了什么?更简单地说,我想知道为什么这些工具默认为白名单信任。
我确定他们选择将白名单列入黑名单的原因。我想仅禁止使用script
等已知的XSS不安全标记和on*
等属性。黑名单方法似乎不可能。
我需要知道原因是什么,我怀疑它是在测试中。例如,为什么不允许style
标签?它在XSS方面是危险的还是由于某些其他原因而存在? (style
可能是XSS不安全的,如评论中所述:XSS attacks and style attributes)
我正在为其他标签寻找更多XSS不安全理由。如果有人知道在哪里找到它们,单元测试本身应该足够了。如果有足够的不安全标签,这应该告诉我为什么需要白名单方法。
答案 0 :(得分:1)
最初的反侦查测试在AntiSamyTest (antisamy)。
他们在AntiSamyTest (owasp)中适应了owasp。
它们包含针对不同html片段的测试,例如:
assertSanitizedDoesNotContain("<TABLE BACKGROUND=\"javascript:alert('XSS')\">", "background");
assertSanitizedDoesNotContain("<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K\">", "<meta");
有关更多示例,请参阅XSS Evasion Cheat Sheet。
我们尝试了黑名单,但我们一直在寻找用于绕过黑名单的新标签或属性,或者旁路过滤器使用了格式错误的html和其他编码,使黑名单变得不切实际且无效。所以现在默认的假设是,如果标签,属性或样式没有明确指定为安全,那么它是不安全的。这不仅可以防止我们已经知道的xss攻击,还可以防止许多新的攻击。</ p>