更新了不良术语
我正在看JSOUP和OWASP JAVA HTML消毒器项目。我只对这样的工具感兴趣,目的是通过对传递给API层的用户输入进行消毒,以防止XSS攻击。OWASP项目说
"通过反萨米的单位测试的95 %加上更多。"
但是,它不会告诉我我自己可以在哪里看到这些测试。这些测试涵盖了什么?更简单地,我想知道为什么这些所说的工具默认为白名单信任。
我敢肯定,他们选择白名单与黑名单的原因。我想禁止仅包括script
等已知的XSS不安全标签和诸如on*
之类的属性。黑名单的方法似乎不可能。
我需要知道这是什么原因,我怀疑它正在测试中。例如,为什么禁止style
标签?它是XSS危险的还是由于某些其他原因而存在的?(style
可以是XSS不安全,如注释中所述:XSS攻击和样式属性)
我正在为其他标签寻找更多XSS不安全的理由。如果有人知道在哪里可以找到它们,则单位测试本身就足够了。给定足够不安全的标签,这应该告诉我为什么需要采用白名单的方法。
原始的反萨米测试在反萨米特(antiasamy)中。
它们是在反萨米特台上改编的(OWASP)。
它们包含针对不同HTML片段的测试,例如:
assertSanitizedDoesNotContain("<TABLE BACKGROUND="javascript:alert('XSS')">", "background");
assertSanitizedDoesNotContain("<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">", "<meta");
有关更多示例,请参见XSS逃避备忘单。
我们尝试了黑名单,但我们一直在寻找用于绕过黑名单或畸形的HTML和其他编码的新标签或属性,旁路过滤器使用了其他编码,使黑名单不切实际且无效。因此,现在默认的假设是,如果标签,属性或样式未明确指定为安全,那么它是不安全的。这不仅可以防止我们已经知道的XSS攻击,还可以保护许多新的Tyes。