xss攻击原理与解决方法
xss攻击是什么?
说直白点就是把html通过评论等输入框,把html代码输入到数据,再次显示用户输入的内容时候就会把他评论的内容的html代码执行掉,比如用户输入'',在刷新页面时候就会执行这段代码执行,如图:
如果用户的一些重要数据存储在cookie中,这时候就可以直接被打印出来,用户信息就一目了然了。
xss解决方法
PHP防止XSS跨站脚本攻击的方法:是针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数 。
在使用htmlspecialchars()函数的时候注意第二个参数, 直接用htmlspecialchars($string) 的话,第二个参数默认是ENT_COMPAT,函数默认只是转化双引号("), 不对单引号(')做转义.
所以,htmlspecialchars函数更多的时候要加上第二个参数, 应该这样用: htmlspecialchars($string,ENT_QUOTES).当然,如果需要不转化如何的引号,用htmlspecialchars($string,ENT_NOQUOTES).
另外, 尽量少用htmlentities, 在全部英文的时候htmlentities和htmlspecialchars没有区别,都可以达到目的.但是,中文情况下, htmlentities却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。
htmlentities和htmlspecialchars这两个函数对 '之类的字符串支持不好,都不能转化, 所以用htmlentities和htmlspecialchars转化的字符串只能防止XSS攻击,不能防止SQL注入攻击.
所有有打印的语句如echo,print等 在打印前都要使用htmlentities() 进行过滤,这样可以防止Xss,注意中文要写成htmlentities($name,ENT_NOQUOTES,GB2312) 。