通常我们使用
PHP代码
- $PHP_SELF = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
来获得当前运行脚本的路径。但是在做一些URL拼合的过程中可能引发XSS跨站攻击。
示例:
PHP代码
- <?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
解决方法:
PHP代码
- $_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转义。

#1
