在HTML中,有几个特殊字符< > & ' "对DOM解析器有重要意义。这些是诸如PHP htmlspecialchars等流行函数转换为HTML实体的字符,以便在解析时不会意外触发某些内容。浏览器是否有其他序列解释为HTML特殊字符?
执行的翻译是:
'&'(符号)变成&
"(双引号)变得" 当没有设置ENT_NOQUOTES。
'(单引号)变成'只有当设置ENT_QUOTES时为 。
'
'>' 变为>
然而,记得在旧的浏览器等IE6中,也有其他字节序列导致浏览器的DOM解析器为interpret content as HTML。
今天这仍然是一个问题吗?如果你单独过滤这5个就足以防止XSS?
例如,这里是(以UTF-8)中的所有已知的在 HTML和JavaScript字符 “
<
%3C
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
\x3c
\x3C
\u003c
\u003C