質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

Q&A

解決済

2回答

2517閲覧

$_SERVER['HTTP_X_FORWARDED_HOST'] の値を偽装する方法

kokkosan

総合スコア17

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

0グッド

2クリップ

投稿2018/07/12 05:48

$_SERVER['HTTP_X_FORWARDED_HOST'] の値を偽装する方法ってありますか?
単にプロキシ(フォワードプロキシ)を通しただけでは値は変わりませんでした。

$_SERVER['HTTP_X_FORWARDED_HOST'] = host1 (host1はリバースプロキシ)
となっているところを
$_SERVER['HTTP_X_FORWARDED_HOST'] = host1, host2(もしくは HTTP_X_FORWARDED_HOST = host2, host1)

に改ざんする方法を知りたいです。

悪用するわけでなく、
wikiにはX-Forwarded-For自体が信憑性に欠けるため、与えられた情報は慎重に取り扱うべきであるとあるのですが、
どのように扱えばいいのかを判断する根拠がないので、どんな改ざんをすれば HTTP_X_FORWARDED_HOST に
どのような値が入ってくるのか、手口を知っておきたいのです。

X-Forwarded-For(wiki)
https://ja.wikipedia.org/wiki/X-Forwarded-For

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

クライアントが偽装する話であれば、単にX-Forwarded-Forヘッダを付加するだけだと思いますよ。

投稿2018/07/12 06:09

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kokkosan

2018/07/16 17:39

ご回答ありがとうございます! 私の知識が乏しく、実現方法がわからないためご質問させていただきたいのですが、 ヘッダを追加するには、わざわざ自分でWEBサーバを立て(もしくはホスティングサーバやクラウドなどを利用し)、 そこに例えばPHPモジュールなどを置いて、そのPHPモジュール内でヘッダを追加する一文を追加し、 そのモジュール経由でお目当のサーバにアクセスすればいいのでしょうか。 PC(Client)→ hostA(リバースプロキシ)→ hostB(Apache) から PC(Client)→ hostC(新サーバ) → hostA(リバースプロキシ)→ hostB(Apache) になるイメージ。 新たにWEBサーバを立てずに、X-Forwarded-Forヘッダを追加してhostBにアクセスする方法はありますでしょうか…?
maisumakun

2018/07/27 02:32

curlなりwgetなりでもヘッダの付加機能はありますし、ブラウザ拡張でヘッダを加工することも可能です。
kokkosan

2018/07/31 02:45

ありがとうございます!試してみます!
kokkosan

2018/08/02 08:02

試してみました。 curl -H 'X-Forwarded-Host:www.test.com, www.test2.com' https://www.xxxxxxxx.co.jp/ PHP側でサーバー変数をvar_dumpして確認すると  HTTP__X_FORWARDED_HOST => www.test.com, www.test2.com サーバー変数に新しく追加されてはいますが、アンダースコアが2つついてて、HTTP_X_FORWARDED_HOST に対して上書きはされていない模様。 (HTTP_X_FORWARDED_HOST は上書きされることなく、残っている。) やり方がまずいのかも…もう少し調べてみます。
kokkosan

2018/08/03 06:08

Linuxでやったらできました。インストールしたcurlがWinだとダメだったのだろうか… ひとまず解決しましたので、ここはクローズします。ありがとうございました!
guest

0

【操作】
curl -H 'X-Forwarded-Host:www.test.com, www.test2.com' https://www.xxxxxxxx.co.jp/

【結果】
リーバスプロキシ:www.test3.com を最後に通ってアクセスされた場合は、

 $_SERVER['HTTP_X_FORWARDED_HOST'] = www.test.com, www.test2.com, www.test3.com

 となる。www.test3.comはモジュールの直前の接続先のため、最も信頼性が高く改ざんが難しいが、
その他の情報についてはいくらでも改ざん可能のため、信頼性が低いことがわかった。
(wikiに書いてあるとおり)

投稿2018/08/03 07:35

kokkosan

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問