也许这对security.stack更好,我不确定,但问题是:
我最近发现一个博客声称<script>alert(1)</script>
将被解析为实际的<script>
。但是,在我最近的Chrome测试中,情况并非如此。有没有人听说过将浏览器解析为真正的标记?如果是这样,那么我不知道如何减轻它,因为可能有其他人而不仅仅是'<'
担心,而且我知道我不想通过所有的unicode来枚举它们
答案 0 :(得分:9)
这将直接违反HTML规范。通过它们,标记有效字符是Ascii字符,而像U + FF1C FULLWIDTH LESS-THAN SIGN“<”这样的字符只是没有特殊意义的数据字符。浏览器需要额外的代码才能将全宽字符映射到Ascii(作为临时映射或者例如通过归一化到NFKD或NFCKC),但是没有理由认为他们会做这样的事情,而不是有理由认为他们可以开始将“[”映射到“&lt;”。
因此,一个声称不同的博客只是描述了某人发明但没有真正理由的可能性。您通常可以从给出的参考和演示中看到这一点。 (也就是说,从没有它们开始。)
围绕Unicode字符肯定存在安全问题看起来彼此相似,但是这是人类错误地将一个字符用于另一个字符的问题,即使它们内部完全不同,例如“<”表示“&lt;”(因此,例如,将HTML源代码中的字符串视为script
元素,即使它不是;或“а”代表“a”(具有相同外观的拉丁字母的西里尔字母)。也就是说,即使程序将字符视为不同,人们也可能看到字符相同。
答案 1 :(得分:4)
不,浏览器不会将全宽LT或GT标志所包围的文本解释为有效的HTML标记,但某些后端会将它们转换为正常的LT或GT标志,造成XSS风险。请参阅以下内容:http://websec.github.io/unicode-security-guide/character-transformations/#best-fit