很多 PHP 初學者也會遇到 Register Globals 的問題,而程式是基於開啟 Register Globals 的 PHP 開發的話,會有安全性的問題,所以不建議開啟,至於有問題的原因,先看以下程式碼:

CODE:
  1. <?php
  2. if($username == "admin" && $password == "passwd"){
  3.     $valid  = true;
  4. }
  5.  
  6. if($valid){
  7.     // print something to valid user
  8. }
  9. ?>

以上程式碼是先檢查用戶名稱及密碼,如果正確就定義 $valid 變數為 true,但如果有人在網址列的最後加上 ?valid=1,那麼即使沒有輸入密碼也可以通過。

而關閉了 register_globals 的話,所有用戶輸入的變數也會用 $_POST, $_GET 及 $COOKIE 等陣列,所以如果在網址列加入 ?valid=1 的話,所傳入的變數只是 $_GET['valid'],而不是 $valid。

當然以上例子的問題可以在最開始的部份加一行 @unset($valid) 解決,但只要關閉 register_globals 就可以完全解決問題。PHP 的官方網站還有一篇關於 register_globals 的安全文章,裡面有更詳細的介紹: