XSS,第一次听说是在博彦面试的时候,后来查询才知道这是PHP编程的一个漏洞。用户可以利用此漏洞执行自己的JS代码,获得网站重要数据。
XSS英文全称:Cross Site Scripting。它是和$_SERVER['PHP_SELF'](不多讲查手册)相关的一个漏洞。主要出现在表单提交数据到本身脚本这一应用上。
先看一下应用代码:
1 2 3 4 | // 将尖括号更换正常状态 <form method="post" action="<?=$_SERVER['PHP_SELF']; ?>"> <input type="submit" value="submit"/> </form> |
我们看到代码是想通过$_SERVER['PHP_SELF']的值,确定表单数据提交的位置,也就是脚本本身。比如该脚本名字index.php,当然在地址栏中输入index.php是没有任何问题的,但是如果在地址栏中给index.php脚本加上参数,会是怎样的结果?
1 2 3 4 5 6 7 8 9 10 11 | <!--将尖括号更换正常状态-->
<!--地址栏输入
http://localhost/eg/stu/XSS/index.php/<script>alert('xss')</script>-->
<!--回车打开页面,此时会有窗口弹出,确定后查看页面源码如下:-->
<form method="post" action="
/eg/stu/XSS/index.php/<script>alert('xss')</script>">
<input type="submit" value="submit" />
</form>
<!-- 此时单击Submit按钮,同样有JS代码执行 --> |
如果参数是一段js脚本又会怎样?这有更多的测试代码http://ha.ckers.org/xss.html
是不是js代码执行了?这个到底有多恐怖,大家可以参考fwolf的博文,那里更为详细的阐述了XSS的危害。
这里笔者给出解决XSS攻击的思路:
对$_SERVER['PHP_SELF']进行转义。过滤其携带的可执行代码。涉及到的函数有htmlentities、strip_tags,以及正则表达式等。
当然,表单的action默认为空就安全了吗?同样不安全!问题如上。