萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> 關於register_globals設置的問題

關於register_globals設置的問題

基於各種各樣的理由,PHP 的設置需要依賴於 register_globals
參數打開,但是也成為安全的重要隱患,請看下面的一段代碼:
<?php
if (authenticate_user()) {
$authenticated = true;
}
...
?>
遠程用戶可以簡單的傳遞 'authenticated' 作為表單變量,即使
authenticate_user() 函數返回 false,$authenticated 還是會設置成 true。這是一個簡單的例子,你或許會說,我的程序不會這樣來寫。
而實際上,在稍微復雜一些的應用裡面,這個機制就會成為重大的漏洞。
因此,新版本的 PHP ,我們建議用戶不要采用這個變量來控制應用,雖然我們沒有打算要在不久的將來刪除。
為了幫助用戶建立 register_globals 設置為 off 的應用,增加了一些變量來代替舊的,下面是7 個新的數組:
$_GET - 包含了通過 GET 發送的表單變量
$_POST - 包含了通過 POST 發送的表單變量
$_COOKIE - 包含了 HTTP cookie 變量
$_SERVER - 包含服務器端變量 (例如:REMOTE_ADDR)
$_ENV - 包含環境變量
$_REQUEST - GET 變量,POST 變量和 Cookie 變量的混合,通過用戶而來而不能信任的變量。
$_SESSION - 包含通過會話模塊注冊的 HTTP 變量
這些變量,在任何范圍內,都自動設置為全局變量,可以在任何地方調用,而不需要加 global 關鍵字。
例如:
function example1()
{
print $_GET["name"]; // 沒有必要寫成:'global $_GET;'
}
另外一個值得一提的小竅門是在 $_SESSION 數組中增加一個記錄能自動作為會話變量注冊,就像你調用了
session_register() 函數。

copyright © 萬盛學電腦網 all rights reserved