首頁  >  文章  >  後端開發  >  為什麼 PHP 中的 register_globals 被停用?

為什麼 PHP 中的 register_globals 被停用?

Linda Hamilton
Linda Hamilton原創
2024-11-15 10:33:02631瀏覽

Why Was register_globals Disabled in PHP?

在PHP 中註冊全域變數

簡介

在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中文網其他相關文章!

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