XSS有三种类型
存储型
特点:经过后端和数据库、危害较大
反射性
经过后端,不经过数据库
DOM型
不经过后端和数据库
XSS平台
https://xss.pt/xss.php
xss无过滤代码
<?php if(isset($_POST['submit'])){ $name = $_POST['input']; echo "Hello ${name}"; } ?>
从源码可以看出对input没有做任何过滤
可以直接构造
payload: 输入框中输入即可成功执行
xss仅用str_replace过滤代码
<?php if(isset($_POST['submit'])){ $name = str_replace("我们可以采用双写绕过
payload: <scr 或
xss正则表达式绕过
<?php if(isset($_POST['submit'])){ $name = preg_replace( "/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i","",$_POST['input']); echo "Hello ${name}"; } ?>
这里的正则表达式导致script无法使用
则我们使用
进行绕过
若是对"<“和”>“进行了编码
我们可以先将”<“和”>"进行url编码
即 3Cscript%3Ealert%281%29%3C/script%3E
xss的防御
将我们需要的值在本文里为input的值过滤时使用 htmlspecialchars(string)即可防御
exp: htmlspecialchars($_POST[‘input’])