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