$_SERVER[\'HTTP_HOST\'] と $_SERVER[\'SERVER_NAME\']: 安全なリンクにはどちらを使用するべきですか?

Barbara Streisand
リリース: 2024-11-24 21:53:35
オリジナル
320 人が閲覧しました

$_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'] は Web サーバーの構成によって決定され、$_SERVER['HTTP_HOST'] はクライアントのリクエストに基づいています。この区別により、サイト全体の信頼できるリンク定義にどの変数を使用するかという問題が生じます。

互換性のために $_SERVER['HTTP_HOST'] を使用するのは論理的であるように思えるかもしれませんが、Chris Shiflett の記事「SERVER_NAME と HTTP_HOST」では次のことが明らかにされています。さらに複雑な状況。 Apache Web サーバーは正規名を使用するように構成でき、サーバー名と SERVER_NAME の一貫性が保証されます。ただし、この構成が強制されない場合は、HTTP_HOST のみに依存するだけでは十分ではない可能性があります。

リンクの整合性を確保するには、次のオプションを検討してください。

  • Canonical を強制する名前: 正規名を使用するように 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート