bob*_*nce 18
htmlspecialchars() 足以阻止文档创建时HTML注入与您声明的限制(即不注入标记内容/未引用属性).
然而,还有其他类型的注射可以导致XSS和:
文档中没有<script>标记.
这种情况并不包括JS注射的所有情况.例如,您可能具有事件处理程序属性(在HTML转义中需要JS转义):
<div onmouseover="alert('<?php echo htmlspecialchars($xss) ?>')"> // bad!
Run Code Online (Sandbox Code Playgroud)
或者更糟糕的是,javascript:link(需要在HTML转义中的URL转义内部进行JS转义):
<a href="javascript:alert('<?php echo htmlspecialchars($xss) ?>')"> // bad!
Run Code Online (Sandbox Code Playgroud)
通常最好避免使用这些结构,尤其是在模板化时.写作<?php echo htmlspecialchars(urlencode(json_encode($something))) ?>非常繁琐.
而且......注入问题也可能发生在客户端(DOM XSS); 在没有明确转义的情况下,htmlspecialchars()不会保护您免受JavaScript写入innerHTML(通常.html()在糟糕的jQuery脚本中).
而且...... XSS的原因不仅仅是注射.其他常见原因是:
允许用户创建链接,而不检查已知良好的URL方案(javascript:是最知名的有害方案,但还有更多)
故意允许用户直接或通过光标记方案(如bbcode,总是可利用的)创建标记
允许用户上传文件(可以通过各种方式重新解释为HTML或XML)