[解決済み] PHP $_SERVER['HTTP_HOST'] vs. $_SERVER['SERVER_NAME'], 私はマニュアルページを正しく理解しているのでしょうか?
質問
いろいろと検索して、PHPの サーバーのドキュメント . 私のサイト全体で使用される単純なリンク定義のための私のPHPスクリプトに使用するものに関して、私はこれを正しく理解していますか?
$_SERVER['SERVER_NAME']
は、Webサーバーの設定ファイル(私の場合はApache2)に基づいており、いくつかのディレクティブによって変化します。(1) VirtualHost, (2) ServerName, (3) UseCanonicalName, など。
$_SERVER['HTTP_HOST']
は、クライアントからの要求に基づいています。
したがって、私のスクリプトを可能な限り互換性のあるものにするために使用する適切なものは、次のようになると思われます。
$_SERVER['HTTP_HOST']
. この仮定は正しいのでしょうか?
フォローアップのコメント
この記事を読んで、何人かの人たちが「quot;彼らはいかなるものも信用しない」と言ったことに気づき、私は少し誇大妄想的になったようです。
$_SERVER
vars"。
-
http://markjaquith.wordpress.com/2009/09/21/php-server-vars-not-safe-in-forms-or-links/
-
http://php.net/manual/en/reserved.variables.server.php#89567 (コメント:Vladimir Kornea 2009年03月14日 01時06分)
どうやら議論の中心は
$_SERVER['PHP_SELF']
と、XSS 攻撃を防ぐために適切なエスケープをせずにフォームの action 属性に使ってはいけない理由です。
上記の私の最初の質問に対する私の結論は、以下のようになります。
$_SERVER['HTTP_HOST']
を使用すれば、フォームで使用する場合でも、XSS 攻撃を心配することなく、サイト上のすべてのリンクに使用できます。
間違っていたら訂正してください。
解決方法は?
おそらく誰もが最初に思うことでしょう。でも、ちょっとだけ難しいんです。ご覧ください。
クリス・シフレットの記事
SERVER_NAME
対談
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;
}
関連
-
[解決済み] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given [重複] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given.
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】pdo - 非オブジェクトのメンバー関数prepare()への呼び出し【重複】。
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み】警告。数値でない値に遭遇しました
-
[解決済み] PHPを使って現在の年を取得するにはどうすればよいですか?
-
[解決済み] PHPで完全なURLを取得する
-
[解決済み] PHPのHTTP_HOSTとSERVER_NAMEの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 整形されていない数値が発生しました。
-
[解決済み】変な電話番号を生成するフェイカー?
-
[解決済み】Apache + PHPで「ヘッダの前にスクリプトの出力が終了する」件
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み] PHPでドメイン名を取得する [重複]。
-
[解決済み] PHPのHTTP_HOSTとSERVER_NAMEの違いは何ですか?
-
[解決済み】PHPで配列のキーが存在するかどうかを判断するために、より迅速で良い方法は何ですか?
-
[解決済み] 現在のドメインを取得する
-
[解決済み] ブラウザがファイルのダウンロードを受信したことを検出する
-
[解決済み] Windows/IISサーバーで、現在のページの完全なURLを取得するにはどうすればよいですか?