揭開PHP 中Register_globals 的謎團
Register_globals 是一個曾經籠罩在神秘之中的PHP 設置,它對腳本功能有著深遠的影響。本文揭示其內部運作並探討相關概念。
什麼是 Register_globals?
register_globals 指令將 $_REQUEST 超全域數組的內容無縫整合到腳本的全域數組中範圍。因此,輸入欄位在腳本中優雅地表現為預定義變數。
例如,包含使用者名字段的表單提交將 $username 變數賦予腳本。然而,這種便利是有代價的:register_globals 會引發安全和編碼噩夢。
說明 Register_globals 的陷阱
考慮以下程式碼:
if (user_is_admin($user)) { $authorized = true; } if ($authorized) { // Grant unbridled power! }
啟用register_globals後,惡意使用者可以利用URL漏洞。只需將“?authorized=1”附加到腳本的 URL 就會授予他們非法存取權限。
區分 Register_globals 和 Global 關鍵字
與 register_globals 相比,global 關鍵字操作明顯地。它允許在本地範圍內存取其他地方聲明的特定變數。
例如:
$foo = 'bar'; baz(); function baz() { echo $foo; // Triggers an error: undefined variable } buzz(); function buzz() { global $foo; // Grants access to $foo within this scope echo $foo; // Outputs "bar" }
結論
雖然register_globals可以加快開發速度,其安全影響遠超過任何感知到的好處。了解其功能並採用良好的編碼實踐對於確保 PHP 應用程式的健全、安全至關重要。相反,global關鍵字提供了一種有針對性的、受控的方法來在指定範圍內操作全域變數。
以上是Register_globals 在 PHP 安全中是朋友還是敵人?的詳細內容。更多資訊請關注PHP中文網其他相關文章!