roo*_*ook 5 security xss utf-8
假设我有一个使用Latin1或某些默认英语编码的Web应用程序.我想将应用程序更改为使用UTF-8或其他语言编码.你能证明这个改变会引入XSS吗?
这不是PHP特定的问题,但在PHP中,您可以显示htmlspecialchars($var,ENT_QUOTES);易受XSS攻击的情况,而htmlspecialchars($var,ENT_QUOTES,'UTF-8');不是.
来自RFC 3629:
\n\n\n10. 安全考虑
\nUTF-8 的实现者需要考虑如何处理非法 UTF-8 序列的安全方面。可以想象,在某些情况下,攻击者可以通过发送 UTF-8 语法不允许的八位字节序列来利用不谨慎的 UTF-8 解析器。
\n可以针对解析器执行此攻击的一种特别微妙的形式,该解析器对其输入的 UTF-8 编码形式执行安全关键的有效性检查,但将某些非法的 noctet 序列解释为字符。例如,解析器在编码为单八位字节序列 00 时可能会禁止 NUL 字符,但会允许非法的两个八位字节序列 C0 80 并将其解释为 NUL 字符。另一个示例可能是一个解析器,它禁止八位字节序列 2F 2E 2E2F(“/../”),但允许非法的八位字节序列 2F C0 AE 2E 2F。\n最后一个漏洞实际上已在 2001 年广泛用于攻击 Web 服务器的病毒;因此,安全威胁是非常真实的。
\n
因此,确定您的数据是有效的 UTF-8至关重要。
\n但一旦完成此操作,与编码相关的安全问题就很小了。所有 HTML 特殊字符均采用 ASCII 格式,而 UTF-8(如 ISO-8859-1)完全兼容 ASCII。 htmlspecialchars将会按照您期望的方式行事。
人们更关心的是非 ASCII 兼容的编码。例如,在GB18030中,ASCII 字节 0x30 及以上可以出现在多字节字符的编码中。连字符\xe2\x80\x90(U+2010) 编码为 A9 5C,其中包含 ASCII 反斜杠。这使得正确处理反斜杠转义变得更加困难,从而引发SQL 注入。