2012-06-11 30 views
11

私はPHPでフォームを作成しており、ユーザーのIPアドレスを記録したいと思います。これはスニップ、そのコードの私が使用している:

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" /> 

私はXAMPPにコードアップを開き、ソースを読んだとき、値は地雷だったものとは異なるIPアドレスを持っていた:

<input type="hidden" name="ip" value="::1" /> 

このIPアドレスは通常、ローカルホスト(XAMPP)で使用すると発生しますか?
そうでない場合は、ユーザーのIPアドレスを取得する方法がありますか?

答えて

18

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

それをしないでください。フォームが提出されると、$_SERVERからリクエストを受け取ります。フォームが生成されてフォームに格納されるときに取得するだけで、人々はそれを変更することができます。

Does this IP address normally happen when I use it in a localhost (XAMPP)?

はい。 localhostからページを要求すると、ローカルIP(IPv6)アドレスを取得するのは正常です。

+0

送信時にチップを変更するためのThx; – zeldarulez

+0

誰かが(VPNなどのように)何とか自分のIPアドレスを変更するとどうなりますか?それから私はそのPCの正しいipを取得しません。それは...ですか? – partho

4

':: 1'は、localhost(または127.0.0.1)のIPV6バージョンです。

ポート80を開き、IPアドレスからページにアクセスしてください。うまくいくはずです:)。

1

これは実際にあなたのIPです。 IPv4ではなく、IPv6のIPであっても。

IPv6では、:: 1はlocalhost/127.0.0.1の略です。

25

IP ::1は、IPv6バージョンでは「localhost」です。あなたのマシンはIPv6で構成されているため、このIPアドレスを取得しています。おそらく、ライブサーバーにアプリケーションをデプロイすると、IPv6はサーバー上で構成されず、アプリケーションはより親しみのあるIPv4アドレス(例:aaa.bbb.ccc.ddd)を取得します。

また、$_SERVER['REMOTE_ADDR']には必ずしも正しいアドレスが含まれているとは限りません。

if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR']; 
} else { 
    $ip_address = $_SERVER['REMOTE_ADDR']; 
} 
+0

チップのThx!ちゃんと覚えておきますよ。 ;) – zeldarulez

+3

HTTP_X_FORWARDED_FORを使用している場合、セキュアな管理ページのローカルIPへのアクセスのみを許可することはできません。そのヘッドは非常に簡単に偽装することができるためです。実際、StackOverflowはこれまでに一度犠牲になり、幸いにも友好的なユーザーがそれを報告しました。 – smdrager

+0

@smdrager:ユーザマシンのIPアドレスを取得する安全な方法は何ですか?私は自分のページを1つのIPだけ開くことを許可する必要があります。 – sqlchild

4

1)を使用する方が効果的です。フォームに<?php echo $_SERVER['REMOTE_ADDR']; ?>を追加する必要はありません。この場合、それを簡単に作ることができます(実際には簡単です)。サーバー側のデータにIPを追加する方が効果的です。

2)$_SERVER['HTTP_X_FORWARDED_FOR']もご覧になれます。 ユーザーがプロキシを持っている場合、その一部(透過プロキシ)が実際のユーザーのIPをそこに配置します。

3)ちょっとした注意:IPに関するデータはまったく信頼できません。

0
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') { 
       $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR']; 
      } else { 
       $ip_address = $_SERVER['REMOTE_ADDR']; 
      } 

このコードは、クライアントのipを返します。これがサーバIPであると思うなら、あなたのサーバが(おそらく)あなたのPC上にホストされているからかもしれません。 あなたのクライアント(PC)とサーバは同じPC上で動作しているので、両方とも同じIPを持っています。 あなたがこれを理解していないなら、実際にはips、地元のipsとそのすべてのものについていくつかの調査を行うべきです。

関連する問題