首頁 >後端開發 >php教程 >$_SERVER[\'HTTP_HOST\'] 與 $_SERVER[\'SERVER_NAME\']:哪一個是 PHP 的正確主機名稱變數?

$_SERVER[\'HTTP_HOST\'] 與 $_SERVER[\'SERVER_NAME\']:哪一個是 PHP 的正確主機名稱變數?

DDD
DDD原創
2024-12-04 06:13:16367瀏覽

$_SERVER['HTTP_HOST'] vs. $_SERVER['SERVER_NAME']: Which is the Right Hostname Variable for PHP?

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

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