2011-01-08 1 views
1

私は私のウェブサイトからAJAX呼び出しを処理するために使用するservice.phpクラスを持っています。 PHP CURLを使用して他の人がサービスにアクセスするのを防ぐため、私は通常、リクエストがmysiteから来ているかどうかを確認し、そうでなければ私のホームページにリダイレクトします。サービスファイルへのリクエストが私のウェブサイトから来たことを確実に確認する方法はありますか?

if($_SERVER['HTTP_REFERER'] != "http://www.mysite.com"){ 
    header('location: http://www.mysite.com'); 
    exit; 
} 

私はPHP聖書で読む:

http://www.php.net/manual/en/reserved.variables.server.php

「すべてのユーザーエージェントがこれを設定し、一部はする能力を提供しないようにつまり、HTTP_REFERERをフィーチャとして変更してください。つまり、実際には信頼できません。

この方法が信頼できない場合、私の質問は、サービスファイルへのリクエストが私のウェブサイトから来たことを確実にどのように確認できますか?

ご協力いただきありがとうございます!

+0

答えが簡単です:あなた**できません。たとえ仲間の泥棒をしばらく止めたとしても、彼はここでスタックオーバーフローに出て、それを避ける方法を完全に正確に取得します。 –

+0

「woot586」が彼の秘密をここに掲載しない限り、彼はうまくいくと思う? – Nanne

+0

また、noobの開発者は、あなたのウェブサイト**からではなく**クライアントのコンピュータ**からリクエストが来ていることを理解することが非常に重要です。 –

答えて

1

ページリクエスト時間、リクエスタのIP、および時々刻々と変化する(つまり1時間程度有効な)秘密の文字列を含む小さなセッションクッキーを作成する必要があります。クッキーは暗号化する必要があります。今すぐAJAX呼び出しが行われると、クッキーをチェックし、IPを比較し、秘密の文字列をチェックし、それに応じて行動します。

しかし、これはハッカーの仕事をより複雑にしますが、不可能ではありません。したがって、HTTPSを方程式に追加する必要があります。クライアントのコンピュータ上の良好なトロイアンでも、誤った要求が可能になります。しかし、ほとんどのシナリオでは、上記の+ HTTPSが攻撃者を追い払います。

+0

HTTPS自体は銀色の弾丸ではありません。クライアント証明書はおそらく意味します。私はOPがこれまでに行くだろうとは思うが、 –

+0

@Col。あなたが私の答えを読んだら、もしあなたが私の答えを読んだら、HTTPSがcookieのman-in-the-middleの漏れを防ぐためのヘルパーとして使われていることが分かります。発信者のIP)。 HTTPSは、ハッカーがユーザーのコンピュータに侵入する可能性を制限します。 –

+0

あなたがオープニングポストを読んだら、それは単なる愚かなajaxサービスです。 "中間攻撃の男"、私の足。 –

1

あなたは簡単に私は考えることはできません。あなたができることは、自分のファイルが常に何らかの種類のパスフレーズを投稿することです。いくつかのデータ(datetime?)とハッシュのを送ったとします。

あなたが知っている限り、あなたはハッシュを作成できます。受信したdatetimeを使用して2番目のファイルにハッシュを再作成し、送信されたハッシュが正しいかどうかを確認します。

他のサイトからのリクエストには、ハッシュと日時、または少なくとも正しいものはありません。