ホームページ  >  記事  >  バックエンド開発  >  ユーザー IP アドレスを取得する一般的な方法と一般的なセキュリティ リスク (HTTP_X_FORWARDED_FOR)_PHP チュートリアル

ユーザー IP アドレスを取得する一般的な方法と一般的なセキュリティ リスク (HTTP_X_FORWARDED_FOR)_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:10:351065ブラウズ

分析プロセス
これは、ユーザーのIPを取得し、ユーザーの操作行動を記録するために一般的かつ頻繁に使用される、いくつかのプロジェクトからのものです。 ほとんどの友人は、IP アドレスを取得する次の一般的な方法を目にするでしょう。

コードをコピー コードは次のとおりです:

function getIP() {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$realip = $_SERVER['HTTP_CLIENT_IP']
} else {
$realip = $_SERVER['REMOTE_ADDR'];
return $realip ;
}



这个是网上常见获取,ip函数,用这些值获取IP,我们首先要弄清楚,这些数据是从那个地方传过来的。

IP获取来源

1.'REMOTE_ADDR' 是远端IP,默认来自tcp 连接是,客户端的Ip。可以说,它最准确,确定是,只会得到直接连服务器客户端IP。如果对方通过代理服务器上网,就发现。获取到的是代理服务器IP了。

如:a->b(proxy)->c ,如果c 通过'REMOTE_ADDR' ,只能获取到b的IP,获取不到a的IP了。

另外:该IP想篡改将很难实现,在传递知道生成php server值,都是直接生成的。

2.'HTTP_X_FORWARDED_FOR','HTTP_CLIENT_IP' 为了能在大型网络中,获取到最原始用户IP,或者代理IP地址。对HTTp协议进行扩展。定义了实体头。

HTTP_X_FORWARDED_FOR = clientip,proxy1,proxy2 所有IP用”,”分割。 HTTP_CLIENT_IP 在高级匿名代理中,这个代表了代理服务器IP。既然是http协议扩展一个实体头,并且这个值对于传入端是信任的,信任传入方按照规则格式输入的。以下以x_forword_for例子加以说明,正常情况下,这个值变化过程。

image


分析Bug风险点:

通过刚刚分析我们发现,其实这些变量,来自http请求的:x-forword-for字段,以及client-ip字段。 正常代理服务器,当然会按rfc规范来传入这些值。但是,当一个用户直接构造该x-forword-for值,发送给用户用户,那将会怎么样呢?

image图(1)

第2步,修改x-forword-fox值,我们看看结果

image

 

第三步,我们再修改下看看会怎么样?

image

はは、上記の結果を見ましたか? x-forwarded-for は値を単独で設定できるだけでなく、任意の形式で値を設定することもできます。 このように、任意の値を書き込むことができるフィールドがあるようなものです。そして、サーバーはデータベースを直接読み取り、書き込み、または表示します。これは、入力に対するフィルタリングやテストを行わずにデータ ソースを操作した場合の一般的な結果と同様に、危険をもたらします。 そして隠蔽も容易です。

結論:

上記の getip 関数に加えて、クライアントは IP を自由に偽造でき、任意の形式で IP を渡すことができます。 これにより、2 つの大きな問題が発生します。1 つは、特定のページを設定して IP 制限を課した場合です。 相手は簡単にIPを変更して継続的にページをリクエストすることができます。 次に、この種のデータを直接使用すると、SQL 登録やクロスサイト攻撃などの脆弱性が生じます。 1 つ目に関しては、ビジネスに制限を設定できますが、IP 制限は使用しないことをお勧めします。 2 つ目については、このタイプは巨大なサイバー リスクをもたらす可能性があります。それを正さなければなりません。

安全な getip 関数を取得するには、Getip を変更する必要があります。

このような問題は実際に非常に起こりやすく、私は過去にこれを使って大量の偽投票を騙してきたことがあります。実際、特定の価値観の裏も表も理解している限り、それは隠されています。仕組みを理解すれば、この種のバグを修正するのは非常に簡単になります。

余談ですが、テクノロジーを実行するには 3 つのステップがあります。まず、それを実行して解決する必要があります。次に、なぜそれを実行したいのか、その理由と原則は何なのか、そしてそれをどのように実行するかを考える必要があります。 、他の方法はありますか?もっと自分自身に問いかけてみると、技術的な真実に近づいていることがわかるでしょう。物事を行うことがますます快適になります!

著者: chengmo QQ:8292669

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327104.html技術記事分析プロセスは一部のプロジェクトから提供されており、ユーザーの IP を取得し、ユーザーの操作行動を記録するためによく使用されます。 ほとんどの友人には、IP アドレスを取得する次の一般的な方法が表示されます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。