web-dev-qa-db-ja.com

PHPセキュリティとしてのIPチェック?

PHPスクリプトの入力を入力したいのですが、これは自分だけがアクセスできる単純なスクリプトです。動的IPアドレスを持っていないので、これはそうではありません。私には問題ではありませんが、私の「セキュリティ」対策に潜在的な問題があるかどうか疑問に思っています。

現在、私のスクリプトは次のように設定されています。

$uip = $_SERVER['REMOTE_ADDR'];
if ($uip == "my personal ip here")
 {
   echo "access granted";
 }

else
 {
   echo "access denied";
 }

これは「安全」ですか?または、私のIPを知っている誰かが、自分のIPを使用してPHPスクリプトへの訪問を偽装し、スクリプトをだましてそれが私のIPであると思わせるようにすることができますか?

助言がありますか?私は物事を過度に複雑にしたくなく(たとえば、ログインページ)、私のKISSソリューションが実行可能であるか潜在的に問題があるかどうかを知りたいだけです。

4
user46995

この設定での最大のリスクは クロスサイトリクエストフォージェリ (CSRF)です。例として、サイトのイメージングには、サイトのタイトルを設定する http://mysite.com/setTitle?title=Hello のようなURLがあります。管理者のみにアクセスを許可し、他のユーザーにはアクセスさせず、IPアドレス制御を使用してこれを実施します。管理者が無関係なサイトを閲覧していて、このURLにリンクするイメージタグが含まれている場合を想像してみてください。 http://mysite.com/setTitle?title=Evil 管理者のブラウザがそのリンクをロードしようとするとどうなりますか。 Webサーバーは、承認されたIPアドレスからの要求を確認し、タイトルを変更できるようにします。良くない! CSRFの通常の修正は、ランダムなトークンをユーザーに発行することです。これはリクエストに含める必要があります。

他にだれがあなたのIPアドレスを使用しますか?ほとんどのホームセットアップには、同じルーター、したがって同じIPアドレスを介してインターネットにアクセスする多数の人々がいます。これらの他の人にアクセスを許可したくない場合があります。

IPアドレスのなりすましのリスクはそれほど問題ではありません。 TCPはこれに対して適切な保護を提供し、多くの攻撃を阻止します。特定の状況ではそれでも可能ですが、単純なものの直後であれば、あまり心配する必要はありません。

6
paj28

残念ながら、これは非常に安全なアプローチだとは思いません。理由はいくつかあります。

  1. ローカルネットワークでのNAT
  2. ISPでのNAT(キャリアグレードNAT)
  3. ブラウザとWebサーバーの間のどこにでもプロキシ
  4. Webサーバーの前にあるロードバランサー

これらのいずれかが原因で、複数のデバイスが同じIPアドレスを共有するためにページにアクセスする可能性があります。

慣れていない場合: ネットワークアドレス変換(NAT) を使用すると、ネットワーク上の複数のシステムが同じパブリックIPアドレスからインターネットにアクセスできます。利用可能なパブリックIPv4アドレスよりもはるかに多くのシステムがインターネットにアクセスしているため、これは必要です。

ほとんどの世帯は、NATを実行するルーターを実行しています。つまり、インターネットに接続するすべてのシステム(デスクトップ、ラップトップ、タブレット、電話、テレビなど)は同じIPアドレスから来ます。これらのシステムのいずれか1つがWebページにアクセスでき、認証されることを意味します。

それよりも悪くなります。 ISPが実行されている可能性があります Carrier-grade NAT(CGN) -つまり、世帯全体がIPアドレスを共有することになります。それらのあなたのウェブページにアクセスでき、認証されます。

次に、プロキシがあります。ブラウザがプロキシ(ISPがホストするプロキシなど)を介してトラフィックを送信する場合、またはWebサイトが コンテンツ配信ネットワーク(CDN) の前にある場合、IPアドレスを取得する可能性が最も高くなります。コンピュータのIPアドレスではなく、プロキシまたはCDNエッジノード。

最後に、WebホストのWebサーバーの前にロードバランサーがある場合、ロードバランサーのIPアドレスが表示されることがあります。

これらすべての理由から、WebページにアクセスするユーザーのIPアドレスのみに依存するログインメカニズムは絶対にお勧めしません。

認証用のコードを自分で記述したくない場合は、サードパーティのライブラリを調べてこれを実行することをお勧めします。ただし、コードをレビューしてからWebページに実装してください。

IPスプーフィングに関して

理論的には簡単に聞こえるIPスプーフィングのリスクについて言及している人もいますが、(単純化された形式であっても)2つの異なる手順が必要です。

  1. IPデータグラムのヘッダーのIPアドレスを変更する
  2. サーバーからの応答を傍受して結果を読み取る

最初のビット自体は難しくありません。問題は、サーバーが攻撃者のIPではなく、なりすましのIPに応答を送信することです。したがって、応答をreadするために、攻撃者はユーザーへの応答を傍受する必要があります。これは一般的にかなり難しいでしょう。

1
James Lambeth

あなたは基本的にあなた自身の質問に答えました。いいえ、唯一のセキュリティ対策として使用するのは安全ではありません。

IPはパブリックであり、IPはスプーフィングされる可能性があるので、人々はあなたのIPをスプーフィングすることで簡単に資料にアクセスできます。

セキュリティのメインレイヤーとしてログインページを推奨します。 ここ は、ログインスクリプトの作成方法に関する簡単で効果的なチュートリアルがあるWebサイトです。知っておくべき、または少なくとも理解するのは本当に良いことです。

0
Lighty