需要注意的幾個PHP漏洞
幾個重要的php.ini選項
Register Globals
php>=4.2.0,php.ini的register_globals選項的預設值預設為Off,當register_globals的設定為On時,程式可以接收來自伺服器的各種環境變數,包括表單提交的變數,而且由於PHP不必事先初始設定變數的值,從而導致很大的安全隱患.
例1:
複製代碼 代碼如下: //check_admin()用於檢查目前使用者許可權,如果是admin設定$is_admin變數為true,然後下面判斷此變數是否為true,然後執行管理的一些操作
//ex1.php
if (check_admin())
{
$is_admin = true;
}
if ($is_admin)
{
do_something();
}
?>
這一段代碼沒有將$is_admin事先初始化為Flase,如果register_globals為On,那麼我們直接提交 http://www.sectop.com/ex1.php?is_admin=true,就可以繞過check_admin()的驗證
例2: 複製代碼 代碼如下: //ex2.php
if (isset($_SESSION["username"]))
{
do_something();
}
else
{
echo "您尚未登入!";
}
?>
複製代碼 代碼如下: //ex1.php
$dir = $_GET["dir"];
if (isset($dir))
{
echo "";
system("ls -al ".$dir);
echo "";
}
?>
mixed eval(string code_str) //eval注入一般發生在攻擊者能控制輸入的字串的時候
//ex2.php 複製代碼 代碼如下:
$var = "var";
if (isset($_GET["arg"]))
{
$arg = $_GET["arg"];
eval("$var = $arg;");
echo "$var =".$var;
}
?>