首頁  >  文章  >  php教程  >  深入了解 register_globals

深入了解 register_globals

黄舟
黄舟原創
2016-12-13 17:43:422015瀏覽

decms 裡強制限制了register_globals 

由於register_globals設定控制PHP變量訪問範圍,如果開啟會引起不必要的安全問題,所以這裡對其進行了強制關閉,如果站長的空間不支持,可以採用以下幾種辦法進行修改,供廣大站長參考: 

*如果是獨立伺服器的使用者可以修改php設定檔中的php.ini,將register_globals=On改為register_globals=Off,然後重啟Apache. 

*如果是虛擬虛擬als=Off,然後重啟Apache. 

*如果是虛擬虛擬als=Off,然後重啟Apache. 

*如果是虛擬主機的使用者,盡可能的通知空間商讓其對配置進行修改,或者可以嘗試ini_set('register_globals',0)來. 

*自己在網站目錄下新建一個.htaccess文件,加上php_flag register_globals off 就行了,如果已有.htaccess文件,直接再最後另起一行添加即可; 

*如果實在不行,那隻有採用最後的辦法直接去include/common.inc.php中將以下程式碼刪除即可(不建議). 

//開啟register_globals會有許多不安全可能性,因此強制要求關閉register_globalsif(ini_get('register_globals')){ exit('php.ini register_globals must is Off!'); } 從PHP4.2.0版本開始,php.ini中的設定選項register_globals 預設值變成了off。所以,最好從現在就開始用Off的風格開始程式設計! 

register_globals的值可以設定為:On或Off,我們舉一段程式碼來分別描述它們的不同。

代碼: 

 

="password" name="user_pass" id="user_pass"> 
 
 

 

當register_globals=Off的時候,下一個程式接收的時候應該用$_GET['user_name']和$_GET['user_pass']來接受傳遞過來的值。 (註:當

的method屬性為post的時候應該用$_POST['user_name']和$_POST['user_pass']) 

當register_globals=On的時候,下一個程式可以直接使用$user_name和$user_pass來接受值。 

顧名思義,register_globals的意思就是註冊為全域變量,所以當On的時候,傳遞過來的值會被直接的註冊為全域變數直接使用,而Off的時候,我們需要到特定的數組裡去得到它。所以,碰到上邊那些無法得到值的問題的朋友應該先檢查一下你的register_globals的設定和你獲取值的方法是否匹配。 (查看可以用phpinfo()函數或直接查看php.ini) 下面來看看這裡有什麼錯誤?

看看下面的這段PHP腳本,它用來在輸入的用戶名及口令正確時授權訪問一個Web頁: 

// 檢查用戶名及口令 
if ($username == ' kevin' 與 $password == 'secret') 
$authorized = true; 
?> 
 

Please enter your username and password:

 
 

Username:
 
Password:
 

 
 
 
  🎜 🎜

上面的程式碼中存在的問題是你可以很容易地獲得訪問的權力,而不需要提供正確的用戶名和口令。只在要你的瀏覽器的網址列的最後加上?authorized=1。因為PHP會自動地為每一個提交的值建立一個變數-- 不論是來自動一個提交的表單、URL查詢字串還是一個cookie -- 這會將$authorized設定為1,這樣一個未授權的使用者也可以突破安全限制。

register_globals=off 網站打不開的解決方法 

register_globals是php.ini裡的一個配置,這個配置影響到php如何接收傳遞過來的參數,顧名思義,register_globals的意思就是註冊為全域變量,所以當OnOn的時候,傳遞過來的值會被直接的註冊為全域變數直接使用,而Off的時候,我們需要到特定的陣列去得到它。所以,碰到上邊那些無法得到值的問題的朋友應該先檢查一下你的register_globals的設定和你獲取值的方法是否匹配。 (查看可以用phpinfo()函數或直接查看php.ini) 

register_globals=off的目的主要是為安全考慮,同時大多數程式要求將該值設為off,以前用On風格寫的大量腳本怎麼辦? 如果你以前的腳本規劃得好,有個公共包含文件,例如config.inc.php一類的文件,在這個文件裡加上以下的程式碼來模擬一下(這個程式碼不保證100%可以解決你的問題,因為我沒有大量測試,但是我覺得效果不錯)。

程式碼: 

if ( !ini_get("register_globals") ) 

extract($_POST); 
extract($_GEGET);
extract($_ENV); 
extract($_COOKIE); 

if ( isset($_SESSION) ) 

extract($_SESSION); index和Undefined variable解決方法 

$act=$_POST['act']; 

用以上的程式碼總是提示 
Notice: Undefined index: act in F:windsflybook 引用內容 
Notice: Undefined variable: Submit ...... 

等一些這樣的提示 


原因:由於變數未定義所造成的 

解決方法: 
1) error_reportreporting.為error_reporting = E_ALL & ~E_NOTICE 

2) register_globals設定: 
找到register_globals = Off 
修改為register_globals = On 

Notice: Undefinedariable:globals Notice: Undefined variable: subject in D:PHP5ENOTEADDNOTE.PHP on line 9 
  Notice: Undefined variable: comment in D:PHP5ENOTEADDNOTE.PHP on line 9 
........ 
  本來辦呢? 
  只要在C:WINDOWS找出php.ini的 
  在php.ini中的302行error_reporting = E_ALL 
  修改成 
   解決方法:修改php .ini 
  將: error_reporting = E_ALL 
  修改為:error_reporting = E_ALL & ~E_NOTICE 
  〔什麼錯誤? php頭部加入 
  ini_set("error_reporting","E_ALL & ~E_NOTICE"); 
  即可

以上深入講述了register_globals,想要獲取更多的相關內容請關注PHPcnPwww.Pwww.網(中文)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn