ホームページ  >  記事  >  バックエンド開発  >  IP 投票を制限するプログラムは、オフラインで検索してクライアント IP を取得するために PHP コードを使用してクライアント IP を取得することはできません。

IP 投票を制限するプログラムは、オフラインで検索してクライアント IP を取得するために PHP コードを使用してクライアント IP を取得することはできません。

WBOY
WBOYオリジナル
2016-06-13 13:06:09774ブラウズ

IP 投票を制限するプログラムの場合、PHP オンラインで検索してクライアント IP を取得するコードを使用してクライアント IP を取得することはできません - 再版

投票イベントのリクエストを受け取り、それを行う必要がありました IP 各回限定 IP 特定の投票機会を制限します。検索エンジンでキーワードを検索しました: PHP クライアント IP 、結果は基本的に次のとおりです:

?

if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {

         $onlineip = getenv('HTTP_CLIENT_IP');

} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {

         $onlineip = getenv('HTTP_X_FORWARDED_FOR');

} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {

         $onlineip = getenv('REMOTE_ADDR');

} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {

         $onlineip = $_SERVER['REMOTE_ADDR'];

}

?

このコードは で広く使用されています ディスカス 》フォーラム ソフトウェアおよび多くのオープン ソース コード PHP はソフトウェアで使用されます。一般的な考え方は、最終的に を取得することです。 クライアント IP アドレス (プロキシアクセスを使用してユーザーのを取得できます) IP アドレス)。

????????? 多くの成熟したプログラムはこのコードを使用してクライアント を取得するため、 IP アドレスなので、自信を持ってプログラムで使用しましたが、幸いにも同僚が後で思い出させてくれたので、このコードは を制限するために使用できないことがわかりました。 IP の投票プロセス、 のため HTTP_X_FORWARDED_FOR これは偽造可能です。 をリクエストヘッダーに追加するだけです X-Forwarded-For 。サーバー側の $_SERVER[‘HTTP_X_FORWARDED_FOR’] 受信されるのは、このリクエスト ヘッダーの内容です。

????????? プログラムを使って説明しましょう:

????????? http://localhost/i.php コンテンツは上記のコードを通じて取得されます IP 住所を指定して印刷します。

?????? リクエストを構築するコードを記述し、これをリクエストしてください URL : リクエストヘッダーに を追加しました X-Forwarded-For このパラメータ

$head = array();

$head[] = 'GET /i.php HTTP/1.1';

$head[] = 'Host: localhost';

$head[] = 'X-Forwarded-For: 255.255.255.255' ;

$head[] = 'Connection: Close' ;

$head = join("\r\n",$head) ;

$head .= "\r\n\r\n";

 

$fp = fsockopen('localhost', 80);

fwrite($fp, $head);

 

$response = array() ;

while($buff = fread($fp, 4096)){

         $response[] = $buff;

}

print join('',$response) ;
?

このコードを実行すると、サーバー側 (localhost/i.php) 印刷済み 255.255.255.255

これはクライアントを取得する方法を示しています IP の方法は限られています IP は投票イベントでは推奨されません。クライアント IP 住所は偽造される可能性があります。代わりに を直接使用してください ? $_SERVER['REMOTE_ADDR'] 得られるものはユーザーの最終的な ではありませんが、 IP アドレスを指定しますが、制限された機能は直接かつ効果的に達成されます。

????????? もちろん、コードが間違っているとは言えません。一部のペアでは IP は、ユーザーがアクセスする地域のサブサイトが多数ある一部の Web サイトなど、無制限の要件に使用する必要があります。 IP 、ユーザーがいる地域のサブ Web サイトなどに直接ジャンプします。

?

?

?

?

?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。