当前位置:  开发笔记 > 编程语言 > 正文

htmlspecialchars vs htmlentities关注XSS

如何解决《htmlspecialcharsvshtmlentities关注XSS》经验,为你挑选了1个好方法。

我已经看到了很多相互矛盾的答案.很多人都喜欢引用单独的php函数不会保护你免受xss的攻击.

什么XSS确实可以通过htmlspecialchars和什么可以通过htmlentities?

我理解功能之间的区别,但不是你留下的不同级别的xss保护.谁能解释一下?



1> Theodore R. ..:

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"将是一场噩梦.
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有