一.XSS漏洞的产生很大原因是:程序没有经过过滤或者过滤的敏感字符不严密就直接输出或写入数据库,导致一些别有用心的人通过构造巧妙的脚本恶意代码来实施攻击。
二.根据漏洞产生的原因,防御XSS漏洞的方法就是对敏感字符进行转义和过滤
方法一:htmlspecialchars函数
格式:string htmlspecialchars(string $string, int $quote_style, string $charset);
三个参数的意义:
$string | 转换对象字符串 |
$quote_style | 转换方法(ENT_NOQUOTES,ENT_COMPAT,ENT_QUOTES) |
$charset | 字符编码。例如:UTF-8、GBK |
三种转换方法:
ENT_COMPAT | 默认。仅编码双引号。 |
ENT_QUOTES | 编码双引号和单引号。 |
ENT_NOQUOTES | 不编码任何引号。 |
实例一:没有任何基本防御
进行防御:
将注入的代码进行了转义,使其失去了效果
实例二:对<script>和</script>进行了过滤,没什么用,大小写组合直接绕过
进行防御:
实例三:对大小写都进行了过滤,并没有什么用,可以通过<img src=1 οnerrοr=alert("xss")>绕过
进行防御
实例四:使用img就可以绕过
进行防御:
实例五:可以使用confirm,prompt标签进行弹窗
进行防御:
实例六:可以使用a"; alert($a);$a="绕过
进行防御:
实例七:和实例六差不多,有htmlentities进行转义,但是却没有对 '(单引号进行转义)
构造payload:a';alert($a);$a=' 可以绕过
进行防御:
实例八:
进行防御
/"οnsubmit=javascript:alert(1)%20name="
防御cookie泄露(开启Http-only)
1.对于session
(未开启)---->(开启):ini_set("session.cookie_httponly",1);
2.对于cookie,把setcookie的第七个参数设置为true