2011-07-02 9 views
1

私は自分のWebページにphpファイルを呼び出し、phpファイルにいくつかの値を渡すjavascriptを持っています。どうすれば私のWebページ上のjsからphpファイルへの呼び出しがあったのかを知ることができ、ブラウザのアドレスバーから直接php urlに入ることはできません。PHPのファイルがクライアント側でのみjsから呼び出されたかどうかをどのように知ることができますか?

答えて

5

$_SERVER['HTTP_X_REQUESTED_WITH']XMLHttpRequestの場合は、チェックを使用します。そうすれば、人々がブラウザに直接URLを入力することを防ぎ、Ajaxリクエストを許可することができます。

if (! empty($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') 
{ 
    // Do something useful 
} 

あなたは、ブラウザ/ JavaScriptライブラリがHTTP_X_REQUESTED_WITHヘッダを送信するかの説明についてはDo all browsers support PHP's $_SERVER['HTTP_X_REQUESTED_WITH']?を見たいかもしれません。 $ _SERVER

両方で

  1. 送信されているヘッダ(通常はAjax呼び出し追加の特別なヘッダ)
    X-Requested-With: XMLHttpRequest
  2. 参照のうえURL:

+1

これはヘッダーであり、最新のブラウザでは簡単に偽装できます。したがって、実際にリクエストの起点を知る方法はありません。そしてどうしたらいい?クライアントは、サーバーから隔離されたシステムです。 – hakre

2

次の情報を使用することができますしかし、ハッキングすることができます。

非常に安全なソリューションが必要な場合は、リクエストごとに固有のコードを作成し、JSからサーバーに送信する必要があります。このコードは、使用するたびに変更する必要があります。

1

できません。あなたが世界に公開するajaxに公開するものは何でも。さらに、そのページに入ることを望んでいる人は、ページ上で自分のJavaScriptを実行して、必要なHTTPヘッダーを偽装できます。これらはあなたがおそらくとにかくしたいと思う人々です。悪意のあるユーザーを制限する対策は使用しないでください。ただし、悪質なユーザーにはほとんど問題がありません。

しかし、私はHTTP_X_REQUESTED_WITHについて聞いたことがなく、予備の読書に基づいて使用するのは良い考えではありません。私は通常、POSTを使用して、_SERVER[REQUEST_METHOD]がPOSTであることをチェックします。なぜなら、ほとんどの現代のブラウザは、URLバーによって行われたリクエストに対してGETを使用するからです(これは私の経験です)。再び、これは悪い人を守ることではなく、ただ事故を防ぐことです。

もう1つの措置は、確認済みの送信元から送信されたことを知らせるために、ページにフラグが送信されていることを確認することです。 Ajaxページの安全性に応じて、セッションなどを確認することもできます。一意的なハッシュ(例:md5)を作成し、DBにタイムスタンプを付けて保存するのがやや安全です。そのハッシュは、例えば3回までページを訪問できることを示します。ユーザーがあなたのajaxリンクをクリックすると、ハッシュが送信されます。ハッシュは消費されたとフラグされ、再利用することはできません。ハッシュは作成後もしばらく時間がかかるはずです(5分?それはあなた次第です)。

最後に、フレンドリーロボット(可能であればrobots.txtmetaなど)がこのページを無視するようにしてください。これにより、検索エンジンを介して偶然に人に届かなくなります。

関連する問題