2008年11月6日星期四

注意$_SERVER['PHP_SELF']可能引起的跨站攻击.

通常我们使用

$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

没有评论:

博客归档