XSS,第一次听说是在博彦面试的时候,后来查询才知道这是PHP编程的一个漏洞。用户可以利用此漏洞执行自己的JS代码,获得网站重要数据。

      XSS英文全称:Cross Site Scripting。它是和$_SERVER['PHP_SELF'](不多讲查手册)相关的一个漏洞。主要出现在表单提交数据到本身脚本这一应用上。

      先看一下应用代码:

1
2
3
4
// 将尖括号更换正常状态
<form method="post" action="&lt;?=$_SERVER['PHP_SELF']; ?&gt;">
<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/&lt;script&gt;alert('xss')&lt;/script&gt;--> 
<!--回车打开页面,此时会有窗口弹出,确定后查看页面源码如下:-->
 
<form method="post" action="
/eg/stu/XSS/index.php/&lt;script&gt;alert('xss')&lt;/script&gt;">
<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默认为空就安全了吗?同样不安全!问题如上。