對於經常使用 PHP 的開發者來說,一提到 REGISTER_GLOBALS 就會引起一種本能的反應,就像遭遇了瘟疫一樣。但為什麼對這個特定的設定如此強烈的厭惡呢?
REGISTER_GLOBALS 的危險
REGISTER_GLOBALS 允許透過 GET 或 POST 傳遞的所有變數都可以作為腳本中的全域變數進行存取。這個看似無害的功能隱藏著一個隱藏的威脅。
存取 PHP 中未宣告的變數只會觸發警告,而不是錯誤。因此,這可能會滋生潛在的漏洞。
範例
考慮以下程式碼片段:
<code class="php"><?php // $debug = true; if ($debug) { echo "query: $query\n"; } ?></code>
如果$ query 沒有明確聲明,上面的程式碼將輸出名為「query 」的GET 或POST 變數的值,不會出現錯誤。雖然這可能不會立即構成威脅,但不幸的是,製作不當的 PHP 程式碼很常見。
在這種情況下,REGISTER_GLOBALS 可能會引入意想不到的副作用和安全漏洞,否則這些副作用和安全漏洞很容易表現為錯誤。
結論
雖然 REGISTER_GLOBALS 本質上不是惡意的,但它已被證明是 PHP 程式碼庫中安全和穩定性問題的一個重要原因。結果,它贏得了臭名昭著的聲譽,開發者一致同意將其視為賤民設定。
以上是為什麼 REGISTER_GLOBALS 被認為是 PHP 中的安全噩夢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!