在PHP 中,register_globals 是一個內部設置,可以自動註冊$_REQUEST 超全域數組中的變數。但是,出於安全考慮,它預設被禁用。
啟用 register_globals 後,來自 POST 或 GET 請求的輸入欄位值可以直接作為具有相同變數的變數進行存取名稱作為輸入欄位。例如:
<form method="post"> <input type="text" name="username"> <input type="submit"> </form>
啟用register_globals 後,以下PHP 程式碼將在腳本開頭評估為true:
$username === $_POST['username'];
引入了嚴重的安全漏洞。例如,攻擊者可以將查詢字串參數附加到 URL,例如“?authorized=1”,以繞過授權檢查。
與 register_globals 不同,global 關鍵字有不同的目的。它用於從函數內的不同範圍存取變數。例如:
$foo = 'bar'; function baz() { // Attempting to use $foo here will trigger a warning echo $foo; } function buzz() { global $foo; // Declares that $foo is a global variable echo $foo; // Prints 'bar' }
雖然由於存在安全風險,register_globals 已不再使用,但 global 關鍵字仍然是存取不同範圍內的變數的有用工具。
以上是為什麼 PHP 中的 register_globals 被停用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!