一、XSS介绍
XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其他脚本语言。根据恶意代码是否存储在服务器中,XSS可以分为存储型的XSS和反射型的XSS。
DOM型的XSS由于其特殊性,常常被分为第三种,这是一种基于DOM树的XSS。例如服务器端经常使用document boby innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型的XSS可能是存储型,也有可能是反射型。
二、反射XSS(low)
2.1、代码分析,header函数表示禁用xss保护
<?php
header ("X-XSS-Protection: 0"); //禁用xss保护
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
2.2、输入,出现弹框,存在XSS
三、反射XSS(medium)
3.1、代码分析,通过str_replace()
进行过滤,将<script>
替换为空
通过大小写绕过,提交,显示弹框
四、反射XSS(high)
4.1、代码分析,使用正则表达式彻底过滤script
4.2、可以采用<img src='1' onerror=alert(/xss/)/>
代替script
五、反射XSS(impossible)
5.1、代码分析,进行了csrf防御,另外htmlspecialchars函数把预定义的字符&、”、’、<、>转换为HTML实体,防止浏览器将其作为HTML元素。
常见防范措施
1、过滤用户输入
2、使用htmlspecialchars()过滤
3、使用owasp等安全xss处理API