php4.2.0的版本是沒有用過,php官網提到:php最具爭議的變化是php4.2.0版本配置中register_globals的On改為了Off,對此項依賴的是如此普遍以至於很多人不知道他的存在而以為php本來就是這麼工作的,下面解釋這個指令如何寫出不安全的代碼,但是要知道這個指令沒有什麼不安全的地方,只有不安全的代碼。
當register_globals打開以後,很多代碼都可以被注入比如html表單提交的內容,再加上php在使用變量的時候無需初始化,這就使得更容易出現不安全的代碼。比如我將php.ini中register_globals設置為On開始狀態:
代碼如下 復制代碼
<?php
// 當用戶合法的時候,賦值 $flag = true
if (is_user()) {
$flag= true;
}
// 由於並沒有事先把 $flag初始化為 false,
// 當 register_globals 打開時,可能通過GET user.php?flag=1 來定義該變量值
// 所以任何人都可以繞過身份驗證
if ($flag) {
include "/highly/sensitive/data.php";
}
?>
以上代碼在register_globals = On的時候,由於$flag沒有初始化,在後面判斷的時候通過get方式的flag = 1也可以執行include。