ホームページ >バックエンド開発 >PHPチュートリアル >ユーザー IP アドレスを取得する一般的な方法と一般的なセキュリティ リスク (HTTP_X_FORWARDED_FOR)_PHP チュートリアル
分析プロセス
これは、ユーザーのIPを取得し、ユーザーの操作行動を記録するために一般的かつ頻繁に使用される、いくつかのプロジェクトからのものです。 ほとんどの友人は、IP アドレスを取得する次の一般的な方法を目にするでしょう。
通过刚刚分析我们发现,其实这些变量,来自http请求的:x-forword-for字段,以及client-ip字段。 正常代理服务器,当然会按rfc规范来传入这些值。但是,当一个用户直接构造该x-forword-for值,发送给用户用户,那将会怎么样呢?
图(1)
第2步,修改x-forword-fox值,我们看看结果
第三步,我们再修改下看看会怎么样?
はは、上記の結果を見ましたか? x-forwarded-for は値を単独で設定できるだけでなく、任意の形式で値を設定することもできます。 このように、任意の値を書き込むことができるフィールドがあるようなものです。そして、サーバーはデータベースを直接読み取り、書き込み、または表示します。これは、入力に対するフィルタリングやテストを行わずにデータ ソースを操作した場合の一般的な結果と同様に、危険をもたらします。 そして隠蔽も容易です。
結論:上記の getip 関数に加えて、クライアントは IP を自由に偽造でき、任意の形式で IP を渡すことができます。 これにより、2 つの大きな問題が発生します。1 つは、特定のページを設定して IP 制限を課した場合です。 相手は簡単にIPを変更して継続的にページをリクエストすることができます。 次に、この種のデータを直接使用すると、SQL 登録やクロスサイト攻撃などの脆弱性が生じます。 1 つ目に関しては、ビジネスに制限を設定できますが、IP 制限は使用しないことをお勧めします。 2 つ目については、このタイプは巨大なサイバー リスクをもたらす可能性があります。それを正さなければなりません。
安全な getip 関数を取得するには、Getip を変更する必要があります。
このような問題は実際に非常に起こりやすく、私は過去にこれを使って大量の偽投票を騙してきたことがあります。実際、特定の価値観の裏も表も理解している限り、それは隠されています。仕組みを理解すれば、この種のバグを修正するのは非常に簡単になります。
余談ですが、テクノロジーを実行するには 3 つのステップがあります。まず、それを実行して解決する必要があります。次に、なぜそれを実行したいのか、その理由と原則は何なのか、そしてそれをどのように実行するかを考える必要があります。 、他の方法はありますか?もっと自分自身に問いかけてみると、技術的な真実に近づいていることがわかるでしょう。物事を行うことがますます快適になります!
著者: chengmo QQ:8292669