ホームページ >バックエンド開発 >PHPチュートリアル >Web サイトがユーザー IP を取得する安全な方法 HTTP_X_FORWARDED_FOR Inspection_PHP チュートリアル
セキュリティフィルターされたgetIP関数
preg_match('/^((?:d{1,3}.){3}d{1,3})/',$realip,$match);
return $match?$match[0]:false ;
}
上記関数はIP判定を追加し、IP形式で始まるデータと、最初にIP形式の値を満たしたデータのみを読み込みます。そうでない場合は false を返します。 このようにして、フォーマットを満たす IP を読み取ることができ、データの IP フォーマットが検証されます。
インターネットの IP、ユーザーの受信 LAN の IP を読み取る場合は、それを直接フィルタリングする必要があります
一部の Web サイトでは、不正な IP アドレスが実際には IP アドレス形式エラーの一部であり、その一部は IP アドレスが読み取られ、インターネットで許可されている IP 形式を満たしていない可能性があるというプロンプトをよく見かけます。 次の関数は、IANA サイト仕様を通じて関数をカプセル化します。 IPアドレスを入力すると、そのIPがインターネット上で利用できるかどうかを正確に知ることができます。
if ($iplist[0] >= 224 && $iplist[0] <= 239)
return 'マルチキャスト';
if ($iplist[0] >= 240 && $iplist[0] < = 255)
「保持」を返す;
if (preg_match('/^198.51.100/', $ip))
return 'TEST-NET-2、ドキュメントと例';
if (preg_match('/^203.0.113/', $ip))
'TEST-NET-3、ドキュメントと例' を返します;
if (preg_match('/^192.(18|19)./', $ip))
return 'ネットワーク ベンチマーク テスト';
if (preg_match('/^192.168/', $ip))
return 'プライベート ネットワーク [イントラネット]';
if (preg_match('/^192.88.99/', $ip))
return 'ipv6to4 リレー';
if (preg_match('/^192.0.2./', $ip))
return 'TEST-NET -1、ドキュメントと例';
if (preg_match('/^192.0.0./', $ip))
return '予約済み (IANA)';
if (preg_match('/^192.0.0./ ' 、$ip))
return '予約済み (IANA)';
if ($iplist[0] == 172 && $iplist[1] <= 31 && $iplist[1] >= 16)
return 'プライベート ネットワーク [イントラネット]';
if ($iplist[0] == 169 && $iplist[1] == 254)
return 'リンクローカル';
if ($iplist[0] == 127)
return 'ループバックアドレス';
if ( $iplist[0] == 10)
return 'プライベート ネットワーク [イントラネット]';
if ($iplist[0] == 0)
return 'このネットワーク (送信元アドレスとしてのみ有効)';
「インターネットアドレス」を返します;
}
IP アドレスを入力して「'インターネット アドレス'」が返された場合、この IP アドレスは正しい形式であるだけでなく、インターネット上の合法的な IP アドレスでもあります。この機能は非常に複雑で、実際には多くの非インターネット アドレスが除外されます。 -インターネット IP アドレス 192、127、10 で始まる一般的なアドレスはおそらくよく知られていますが、実際には、上記の 2 つの機能を使用すると、正しい形式を読み取ることができるだけではありません。 . IP アドレスはインターネット上の IP アドレスであることも保証できます。
著者: chengmo QQ:8292669