確定PHP 腳本的正確主機名稱變數
在PHP 腳本中定義連結時,為主機名稱選擇適當的變數至關重要。從歷史上看,人們認為應該使用 $_SERVER['HTTP_HOST'],因為它是基於客戶端的請求,而 $_SERVER['SERVER_NAME'] 基於伺服器的設定檔並且可能會有所不同。
然而,正如 Chris Shiflett 的文章“SERVER_NAME Versus HTTP_HOST”中所述,沒有明確的答案。只有強制 Apache 使用規範名稱,您才能一致地透過 SERVER_NAME 檢索到正確的伺服器名稱。
在不可能的情況下,您可以考慮實作白名單方法:
$allowed_hosts = array('foo.example.com', 'bar.example.com'); if (!isset($_SERVER['HTTP_HOST']) || !in_array($_SERVER['HTTP_HOST'], $allowed_hosts)) { header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request'); exit; }
此方法涉及根據預先定義的允許值清單檢查主機名稱。如果清單中不存在主機名,則會傳回錯誤。
需要注意的是,雖然 $_SERVER['HTTP_HOST'] 似乎是一個更靈活的選擇,但它可能容易受到以下操作的影響惡意行為者。這可能會損害您的應用程式的安全性。
因此,最佳決策取決於您的特定要求和安全考慮。如果您需要可靠且一致的伺服器名稱,則可能需要在伺服器設定中強制主機名稱規範化並使用 $_SERVER['SERVER_NAME']。或者,使用 $_SERVER['HTTP_HOST'] 的白名單方法提供了更靈活但可能不太安全的選項。
以上是$_SERVER[\'HTTP_HOST\'] 與 $_SERVER[\'SERVER_NAME\']:哪一個是 PHP 的正確主機名稱變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!