1

私はライブ気象データページに取り組んでいます。私たちの天気モジュールはデータを CSV で出力し、ウェブサーバーに保存します。次に、PHP スクリプトを使用して CSV を配列に変換し、それを JSON にエンコードして出力し、jQuery Ajax スクリプトが頻繁に呼び出して最新のデータを取得し、ページを更新できるようにします。これはこれまでのところうまくいっています。

私の質問は、JSON (前述の PHP スクリプトの URL) を取得するために使用される URL を開いてブラウザーで表示できないようにするにはどうすればよいですか? アクセス許可を調整しようとしましたが、成功しませんでした。

喜んで手伝ってくれる人に前もって感謝します。

4

3 に答える 3

3

Ajax 呼び出しもブラウザーから行われるため、これを行う実際の方法はありません。適切なブラウザー呼び出しと Ajax 呼び出しの間に実際の違いはありません。GET 呼び出しは GET 呼び出しです。

編集

@Adeneoの提案によると、何らかのキーを介して疑似セキュリティを実装することは、文字通り呼び出しをブロックする方法がなくても、人々がページを表示するのを難しくする良い方法です.

また、Ajax 呼び出しにヘッダーを追加し、バックエンド スクリプトでそのヘッダーの存在を確認すると、なりすましが少し難しくなります。

別のアイデアは、そのサービスがページビューごとに1回だけ呼び出される場合、サーバーから提供されたjavascriptにキーを設定して、ajax呼び出しに追加できるということです。サーバーが呼び出されると、提供されたキーは使用後に無効になり、誰かが同じキーでサービスを 2 回呼び出すことができなくなります。

于 2012-10-03T12:51:49.330 に答える
1

何らかの形式の「認証トークン」ではないものは偽造できるため、ブラウザーを (確実に) 識別する方法はありません。サーバーはクライアントの正直さに依存しています。

リクエストが ajax リクエストかどうかを検出できます。これを行う1つの方法へのリンクを次に示します。

http://davidwalsh.name/detect-ajax

これが彼のやり方です:

/* AJAX check  */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    /* special ajax here */
    die($content);
}

die()リクエストが ajax の場合は、if のステートメントを逆にする必要があります。

ajax を検出する方法は他にもありますが、どれも 100% 安全ではありません。たとえば、ajax 呼び出しを識別するのに役立つ GET 変数を設定するなどです (ただし、その get 変数は、アドレス行を介してブラウザー経由で送信することもできます...あなたは写真を手に入れます)

于 2012-10-03T12:53:56.213 に答える
0

簡単な答え: できません。

長い答え: シンプルなBrowser Sniffingを実装できます。または、はるかに高度な方法を検索してください。

$browser = get_browser(null, true);
if ($browser[parent] == "whatever-identifies-clients-that-have-access") {
  //Code to output jSon here.
}
else {
  header('HTTP/1.1 403 Forbidden');
}

ただし、これはセキュリティではないことに注意してください。せいぜい、それは障壁を投げます。しかし防ぐことは不可能です。

編集これは、クライアントがブラウザーではないことを前提としています。私は、ある種の (モバイル) クライアントが JSON にアクセスしていると誤って想定していました。ブラウザの場合、アクセスを拒否することはできません。まったく。AJAXもそのブラウザから来ています。

于 2012-10-03T12:55:22.700 に答える