You are here: 首頁 資訊安全 Register Globals 不安全的原因

飛朵啦學習手札

本網站建議使用Firefox2.0以上,或是使用Goole瀏覽器來瀏覽,並使用1024x768解析度來觀看.

Register Globals 不安全的原因

E-mail 列印 PDF

  基本上從Linux下Apache與PHP安全相關設置,可以得知一個安全的 php.ini設置如下.

php.ini的安全設置範例:
——————————————————————————–

safe_mode = On
allow_url_fopen = Off
allow_url_include = Off
register_globals = Off
magic_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:

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

 

以上程式碼是先檢查用戶名稱及密碼,如果正確就定義 $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

 
 
 

新增回應


驗證碼
更新