为什么OWASP将HTML列入白名单而不是黑名单信任方法?

时间:2017-09-27 19:28:27

标签: java xss owasp

更新了不良术语

我正在查看JSoupOWASP Java HTML sanitizer project。我通过清理传递给API层的用户输入来对防止XSS攻击的这种工具感兴趣。 OWASP项目说

  

"通过95%以上的AntiSamy单元测试以及更多。"

但是,它并没有告诉我自己哪里可以看到这些测试。这些测试涵盖了什么?更简单地说,我想知道为什么这些工具默认为白名单信任。

我确定他们选择将白名单列入黑名单的原因。我想仅禁止使用script等已知的XSS不安全标记和on*等属性。黑名单方法似乎不可能。

我需要知道原因是什么,我怀疑它是在测试中。例如,为什么不允许style标签?它在XSS方面是危险的还是由于某些其他原因而存在? (style可能是XSS不安全的,如评论中所述:XSS attacks and style attributes

我正在为其他标签寻找更多XSS不安全理由。如果有人知道在哪里找到它们,单元测试本身应该足够了。如果有足够的不安全标签,这应该告诉我为什么需要白名单方法。

1 个答案:

答案 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>