触发漏洞点:$_SERVER['PHP_SELF']
$_SERVER['PHP_SELF']一般用来引用当前网页地址,是系统自动产生的全局变量。
如
若输入网址为:http://localhost/l.php/a,此时页面正常进行且并不报错
若在a的位置构造恶意js,则会执行js代码
漏洞原因:web服务器允许/xx/aa/123等形式的请求发生
漏洞利用效果:
解决方案:
1、用htmlentities($_SERVER['PHP_SELF']),将恶意代码转化为html实体,使代码无法实现
2、用$SERVER['REQUEST_URL']代替$_SERVER['PHP_SELF']
原因:$SERVER['REQUEST_URL']会原封不动的反应网址本身,而$_SERVER['PHP_SELF']会对网址进行一次urldecode。
注意:很多情况下,浏览器会对用户输入要提交给web服务器的内容进行encode,然后服务器端程序会自动进行decode