$PHP_SELF = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
来获得当前运行脚本的路径。但是在做一些URL拼合的过程中可能引发XSS跨站攻击。
示例:
<?php
$PHP_SELF = $_SERVER['PHP_SELF'] ? $_SERVER["PHP_SELF"] : $_SERVER["SCRIPT_NAME"];
echo '<a href="' . $PHP_SELF . '">aaa</a>';
触发方式:http://localhost/script.php/%22%3E%3Cscript%3Ealert('lib3rt3')%3C/script%3E
解决方法:
$_SERVER['SCRIPT_NAME'] ? $_SERVER["SCRIPT_NAME"] : htmlspecialchars($_SERVER["PHP_SELF"]);
注解:使用http://localhost/script.php/%22%3E%3Cscript%3Ealert('lib3rt3')%3C/script%3E执行脚本时,$_SERVER['SCRIPT_NAME']值为/script.php,未包含恶意的脚本。另外,即使最终使用的是$_SERVER['PHP_SELF']的值,也会被htmlspecialchars转义。
资料来源:http://www.sebug.net/vulndb/2748
没有评论:
发表评论