我已经看到了很多相互矛盾的答案.很多人都喜欢引用单独的php函数不会保护你免受xss的攻击.
什么XSS确实可以通过htmlspecialchars和什么可以通过htmlentities?
我理解功能之间的区别,但不是你留下的不同级别的xss保护.谁能解释一下?
htmlspecialchars()不会保护您免受UTF-7 XSS攻击,即使在IE 9中仍然困扰着Internet Explorer:http://securethoughts.com/2009/05/exploiting-ie8-utf-7-xss-vulnerability-using -本地重定向/
例如:
您应该始终使用htmlentities,并且在清理用户输入时很少使用htmlspecialchars.另外,您应该始终删除标签.对于非常重要且安全的站点,您永远不应该信任strip_tags().使用HTMLPurifier for PHP.
如果页面声明编码(它总是应该!),那么就没有UTF-7漏洞利用的风险.我强烈反对使用`strip_tags`.它会使一些合法的输入(`2 <4`,``)出错,但不会提高`htmlspecialchars` -cacaped数据的安全性.
如果您的页面/浏览器容易受到UTF-7问题的影响,那么`htmlentities`将不会比'htmlspecialchars`更能帮助您.它们都会将`<`和`>`的UTF-7编码作为"安全"的ASCII字符进行插入并传递它们.`strip_tags`也是一样的问题.
@ TheodoreR.Smith:解决方案是始终将字符集参数传递给`htmlspecialchars`,并在页面上设置正确的字符集.如果浏览器忽略了正确的字符集,那么你无能为力......
@NikiC好的.请发布您的替代答案.
另请注意,您的示例不正确:[证明](http://3v4l.org/XYedd).您的确切代码在所有版本的PHP上产生相同的结果(一直回到4.3,但有缺少ENT_HTML401的注意事项).
为什么剥开标签?
@ TheodoreR.Smith如果charset是英语,`htmlspecialchars`和`htmlentities`应该获得相同的结果.但如果某些角色是中国人,使用"htmlentities"将是一场噩梦.