Register Globals 不安全的原因 	
  基本上從Linux下Apache與PHP安全相關設置,可以得知一個安全的 php.ini設置如下.
php.ini的安全設置範例:
 ——————————————————————————–
 safe_mode = On
allow_url_fopen = Off
allow_url_include = Off
register_globals = Offmagic_quotes_gpc = On
display_errors = Off
disable_functions = shell_exec,system,exec,passthru,show_source,get_cfg_var
#或者,也可以考慮開放後兩個危險係數較低的函數:
disable_functions = shell_exec,system,exec,passthru
open_basedir = .
  
  而其中對於大家最熟悉的莫過於register_globals這個變數,有許多網站他要設置為on才能運作,例如OSC購物車,我對於這邊其實不太了解,之後在網路上搜尋找到了以下的見解 ﹔
  很多 PHP 初學者也會遇到 Register Globals 的問題,而程式是基於開啟 Register Globals 的 PHP 開發的話,會有安全性的問題,所以不建議開啟,至於有問題的原因,先看以下程式碼:
 CODE:
   -      
     
 -      
if($username == "admin" && $password == "passwd"){
      -      
    $valid  = true;
      -      
}
      -      
 
      -      
if($valid){
      -      
    // print something to valid user
      -      
}
      -      
?>
      
    
 以上程式碼是先檢查用戶名稱及密碼,如果正確就定義 $valid 變數為 true,但如果有人在網址列的最後加上 ?valid=1,那麼即使沒有輸入密碼也可以通過。
 而關閉了 register_globals 的話,所有用戶輸入的變數也會用 $_POST, $_GET 及 $COOKIE 等陣列,所以如果在網址列加入 ?valid=1 的話,所傳入的變數只是 $_GET['valid'],而不是 $valid。
 當然以上例子的問題可以在最開始的部份加一行 @unset($valid) 解決,但只要關閉 register_globals 就可以完全解決問題。PHP 的官方網站還有一篇關於 register_globals 的安全文章,裡面有更詳細的介紹
 原出處:www.real-blog.com/programming/239