深入研究有爭議的REGISTER_GLOBALS:深入探究其危險
對於那些不熟悉PHP 開發的人來說,REGISTER_GLOBALS 可能看起來是一個無害的設定。然而,PHP 開發人員有充分的理由對它表示蔑視。
什麼是 REGISTER_GLOBALS?
REGISTER_GLOBALS 讓 PHP 腳本能夠為透過 GET 或 POST 接收的任何資料自動建立全域變數
為什麼如此令人厭惡?
REGISTER_GLOBALS 的主要問題在於它不加區別地將變數轉換為全域變數。 PHP 不會將存取未宣告的變數視為錯誤,而是視為警告。這可能會滋生安全漏洞。
考慮以下程式碼片段:
<code class="php">// $debug = true; if ($debug) { echo "query: $query\n"; }</code>
如果沒有使用 REGISTER_GLOBALS,存取未聲明的 $query 變數將觸發警告。然而,當 REGISTER_GLOBALS 處於活動狀態時,它會默默地創建一個名為 $query 的全域變量,允許存取資料庫查詢或使用者輸入等潛在敏感資訊。
低品質程式碼迫在眉睫的威脅
雖然 REGISTER_GLOBALS 本質上沒有問題,但它放大了編寫不良的 PHP 程式碼中存在的漏洞。許多 PHP 腳本缺乏強大的錯誤處理和變數驗證,為惡意行為者利用這些漏洞鋪平了道路。
結論:
REGISTER_GLOBALS 是一個應該接近的設定極度謹慎。它引入了重大的安全風險,並導致 PHP 腳本混亂,無法遵守良好的程式設計實踐。停用 REGISTER_GLOBALS 是編寫安全且可維護的 PHP 應用程式的關鍵一步。
以上是為什麼 REGISTER_GLOBALS 被認為是 PHP 中的安全風險?的詳細內容。更多資訊請關注PHP中文網其他相關文章!