• 締切済み

なぜHTTP_X_FORWARDED_FORで

function isproxy() { return (isset($_SERVER['HTTP_VIA']) || isset($_SERVER['CLIENT_IP']) || isset($_SERVER['HTTP_X_FORWARDED_FOR'])); } $msg = isproxy() ? 'プロキシ経由である' : 'プロキシ経由ではない'; なぜ上記のソースでプロキシだと判断できるのかが分かりません。 前の二つの変数はまだわかるんですが、HTTP_X_FORWARDED_FORについてはプロキシでなくてもセットされて生のIPアドレスが収納されますよね。 functionのところで、三つの内一つでも変数が存在するならTrueを返せってことですよね? その下のクエスチョンとコロンで作られた式がよく分かりませんが、おそらく関数で返ってきた値を判断してクエスチョンの後に書かれたものを結果とするものだと思います。 コロンを挟んで左側がTrueだった場合、右側がFalseだった場合の結果ですよね。 問題はこの関数ですが、プロキシ経由だろうと生だろうと、Trueを返すのではないでしょうか? というのも、HTTP_X_FORWARDED_FORはプロキシ経由じゃなくてもセットされて生アドレスが収納されますよね? 実際、確かめてみたところ、プロキシでアクセスすればプロキシのアドレスが、生でアクセスすれば生アドレスが収納されており、どちらにせよHTTP_X_FORWARDED_FORはセットされていました。 これじゃどちらでも「プロキシ経由である」と出ると思ってたら、ちゃんと生のときは「プロキシ経由ではない」と出ました。 何か僕の解釈は間違えているのでしょうか? 試したプロキシは匿名性が高いとされているもので、HTTP_X_FORWARDED_FORの中で通常、カンマを挟んでいくつかアドレスが収納されるのに対して、このプロキシでは生の時みたいに一つしか収納されないので、アドレスの数で判断はできないと思います。 また、HTTP_VIAとCLIENT_IPはセットされておりませんでした。 これでなぜプロキシ経由だと判断できるのでしょう?

noname#250248
noname#250248
  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • t_ohta
  • ベストアンサー率38% (5083/13283)
回答No.2

X-Forwarded-for はプロキシ経由やロードバランサーを経由してアクセスして来た場合に付加されるヘッダーなので、本来なら直アクセスの場合は無い値です。 どのような環境で確認されたのか判りませんが、何か経由する装置が間に挟まっているのでしょう。 「クエスチョンとコロンで作られた式」は三項演算子です。 http://php.net/manual/ja/language.operators.comparison.php

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

> 実際、確かめてみたところ、プロキシでアクセスすればプロキシのアドレスが、生でアクセスすれば生アドレスが収納されており、どちらにせよHTTP_X_FORWARDED_FORはセットされていました。 あり得る可能性としては、 1.あなたが知らないだけで実はProxyサーバー(ないし類似の物)経由でアクセスしている 参考:https://ja.wikipedia.org/wiki/X-Forwarded-For 2.特殊なブラウザ設定で、X-Forwarded-for: ヘッダをブラウザで付加するようになっている のどちらかでしょう。 まず間違いなく1のケースですね。

関連するQ&A

  • プロキシの制限について

    プロキシの制限を以下のように記述したのですが、 プロキシを制限する上で加えた方がいい記述や 削除した方がいい環境変数などありますか? 助言いただきたくお願いいたします。 if($ENV{'HTTP_VIA'}||$ENV{'HTTP_FORWARDED'}||$ENV{'HTTP_PROXY_CONNECTION'}||$ENV{'HTTP_CACHE_INFO'}||$ENV{'HTTP_XROXY_CONNECTION'}||$ENV{'HTTP_XONNECTION'}||$ENV{'HTTP_X_FORWARDED_FOR'}){ unless ($ENV{'REMOTE_HOST'} =~ /docomo/){#ドコモの携帯は除外する push(@error, 'プロキシ経由の利用は制限しております。'); } }

    • ベストアンサー
    • Perl
  • プロキシを通ったHTTPリクエストのIP

    LANの中において複数の端末のIPアドレスは、192.168ではじまるケースが多いと思いますが、プロキシサーバを通ったHTTPリクエストのリクエスト元IPアドレスも同じなのでしょうか。それとも、外向けにはまったく違うIPがリクエストにのってゆくのでしょうか。

  • IPアドレスが全て同じに書き換えられてしまう

    自分のホームページに2種類のアクセス解析を付けています。 1つはPHPで、1つはCGIです。 3日前までは両方のプログラム共に正常に動いていましたが、ある時を境に突然すべて同じIPアドレス(もちろんホスト名も全て同じ)を記録するようになりました。他人で全く別のIPアドレスから来ているのも関わらずです。自分のIPアドレスも調べてみましたが、やはり全然違うIPアドレスです。他人のホームページで自分のIPアドレスを調べると、ちゃんと自分のIPアドレスなのですが、自分のホームページを介するとやはり書き換えられてしまいます。 ["REMOTE_ADDR"]で取るとこのような現象が起こります。["HTTP_X_FORWARDED_FOR"]では大丈夫なようです。 どうして突然変わってしまったか、教えていただけると幸いです。色々と探して見ましたが全然見当たりませんでした。 直すには自分で出来るのでしょうか?サーバーを借りてますので、そちらに連絡しないと駄目なのでしょうか?

  • プロクシーサーバについて

    こんばんは。 プロクシーサーバーの設定をインターネットオプションからして、「確認くん」などの自分のipアドレスが調べられるサイトに行くと、プロキシーサーバーのipが見えていて、無事に経由してるなってなっています。 しかし、「speedtest ookla」http://www.speedtest.net/ ここだど、プロキシー設定しても、自分のプロバイダーの生ipが左下に表示されます。これはなぜでしょうか? この状態で確認くん等はちゃんとプロキシーのipになっており、このサイトだけが生ipです。 前から疑問だったので、質問させていただきました。よろしくお願いします。

  • IPを毎回変化しながらプロキシだとわからない方法

    IPアドレスを毎回変化しながら、プロキシだとわからないようにする方法ってありますか? (1)同じIPアドレスは2度と使用しない。モデムの電源を御切れば、IPは変わるが、ホスト名も毎回変えたい。→プロキシしかない?? (2)「HTTP_VIA」、「HTTP_CACHE_CONTROL」はソフトで消せると聞きましたが、プロキシを通せば、結局付加されてしまう?

  • これはプロキシーホストですか?

    ~~.google.com というホスト名で、「~~」の部分にIPアドレスが含まれないものが掲示板に投稿されました。 1.この投稿はプロキシー経由のホストと判断していいのでしょうか? 2.また、アクセス解析で投稿の形跡が残らないもの = プロキシー経由と判断してよいのでしょうか? よろしくお願いします。

  • HTTP認証ダイアログについて

    下記のPHPスクリプトを実行して、アカウント(ID:admin,パス:pass)を入力してもHTTP認証ダイアログが消えません。ダイアログが消えて、Hello! と表示させたいのですが、どこが間違っているのか、教えていただきたいです。 <?php $user="admin"; $pass="pass"; if (!isset($_SERVER['PHP_AUTH_USER'])) { //初回認証時(PHP_AUTH_USER:HTTP 認証しているときにそのユーザー名がセットされます。ダイアログに入力した値) header("WWW-Authenticate: Basic realm=\"PHP Web Storage\""); header("HTTP/1.0 401 Unauthorized"); echo "Please input account info!\n"; exit; }else { $flg=false; while(isset($user)){ if($_SERVER['PHP_AUTH_USER']==$user && $_SERVER['PHP_AUTH_PW']==$pass){ $flg=true; break; } } if(!$flg){echo"Please input valid account!\n";exit;} //停止 else{echo'Hello!';exit;} } ?>

    • ベストアンサー
    • PHP
  • squid の設定で IP を隠したい

    現在、TurboLinux6.0でsquidを使ってプロキシサーバーを動かしています。 http://www.taruo.net/e/?TARGET= のようなサイトで調べてみると下記のように情報 が出てしまいます。 REMOTE_HOST 202.****.***.210  REMOTE_ADDR 202.***.***.210  HTTP_REFERER (none)  HTTP_USER_AGENT . Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90) HTTP_ACCEPT . application/vnd.ms-excel, application/msword, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, */* HTTP_ACCEPT_LANGUAGE . ja HTTP_HOST . www.taruo.net その他の情報 HTTP_X_FORWARDED_FOR . unknown HTTP_VIA . 1.0 proxy.yuntaku.com:730 (Squid/2.4.STABLE1) HTTP_CONNECTION . keep-alive  HTTP_CACHE_CONTROL . max-age=259200 掲示板などに接続もとがでるものがありますよね。それに書き込むとIPが書かれてし まいます。 これを何とか隠したい(又は別の名前にしたい)のですが、何か方法は無いのでしょ うか?

  • NetBarrier X5について

    NetBarrier X5について NetBarrier X5を最近使い始めました。 NetBarrierのログを見ていて気になったのですが 表示されているIPアドレスの ホームページにアクセスしたことはなくても ログには色々なIPアドレスが記録されていますが ログの「種類」の項目に 『接続先: TCP HTTP-Web service』 と表示されているIPアドレスは ログを見ていると邪魔に感じる事はあっても 特に害はない、と思って良いのでしょうか。 それから、いわゆる不正アクセス等が試みられた場合 ログの「種類」の項目にはなんと表示されるのでしょう?

    • 締切済み
    • Mac
  • ■ Firefoxのプロキシ設定の仕方について ■

    Firefoxブラウザのプロキシ設定について教えてください。 プロキシ設定には、以下 ・HTTPプロキシ ・SSLプロキシ がありますが、それぞれプロキシサーバーのアドレスを設定すると、接続先は以下のようになるのでしょうか? HTTPでのアクセスはHTTPプロキシで設定したサーバーへ HTTPSでのアクセスは、SSLプロキシで設定したサーバーへ またSSLプロキシで設定したサーバーを経由した場合は、そのプロキシサーバーは単なる転送で、プロキシサーバーからはデータの内容は暗号化されたままで分からないのでしょうか? ご解説いただける方、よろしくお願いいたします。

専門家に質問してみよう