首頁  >  文章  >  後端開發  >  $_SERVER[\'HTTP_HOST\'] 與 $_SERVER[\'SERVER_NAME\']:您應該使用哪一個來實現安全連結?

$_SERVER[\'HTTP_HOST\'] 與 $_SERVER[\'SERVER_NAME\']:您應該使用哪一個來實現安全連結?

Barbara Streisand
Barbara Streisand原創
2024-11-24 21:53:35321瀏覽

$_SERVER['HTTP_HOST'] vs. $_SERVER['SERVER_NAME']: Which Should You Use for Secure Links?

PHP 伺服器變數:'HTTP_HOST' 與'SERVER_NAME'

您遇到了一些信息,建議使用任何$_SERVER變數是不安全的,導致您質疑使用$_SERVER['HTTP_HOST']和$_SERVER['SERVER_NAME']。讓我們澄清一下情況。

如您所知,$_SERVER['SERVER_NAME'] 由網頁伺服器的設定決定,而 $_SERVER['HTTP_HOST'] 是基於客戶端的請求。這種區別提出了使用哪個變數來實現網站範圍內的可靠連結定義的問題。

雖然使用 $_SERVER['HTTP_HOST'] 來實現相容性似乎合乎邏輯,但 Chris Shiflett 的文章“SERVER_NAME Versus HTTP_HOST”揭示了更複雜的情況。 Apache Web 伺服器可以設定為使用規格名稱,確保伺服器名稱與 SERVER_NAME 一致。但是,如果不強制執行此配置,僅依靠 HTTP_HOST 可能還不夠。

為了確保連結的完整性,請考慮以下選項:

  • 強制Canonical Names:設定Apache 使用規範名稱,確保SERVER_NAME 始終提供正確的伺服器name.
  • 驗證主機名稱:使用白名單驗證HTTP_HOST 標頭中提供的主機名稱是否有效。例如:
$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;
}

透過評估這些選項並考慮提出的安全問題,您可以就哪種方法最適合您的 PHP 腳本做出明智的決定。

以上是$_SERVER[\'HTTP_HOST\'] 與 $_SERVER[\'SERVER_NAME\']:您應該使用哪一個來實現安全連結?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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