0

だから私はJavaScriptとphp Webアプリを持っています。私のアプリでは、たとえば投稿を作成する POST リクエストを JavaScript が呼び出すことがあります。誰かがその URL にアクセスするのを防ぐために、リクエストを認証する最善の方法を知りたいです。それほど柔軟である必要はありません。複数のアプリを持つつもりはありません。PHP と JavaScript で 1 つのケースのソリューションが必要なだけです。

編集:2番目の質問。リクエストの送信元の URL を確認するだけで十分ですか?

4

3 に答える 3

2

できません。

JavaScript からのリクエストに追加のヘッダーを追加するなどの操作を行うことができますが、その方法に関する指示をブラウザーに送信する必要があるため、誰でもそれらを読んでカスタムビルドの非 JS 用に複製できます。リクエスト。

WWW では (クレデンシャルを使用して) 人を認証できますが、クライアントを認証することはできません (コンパイル済みのバンドルでクライアント ソフトウェアを提供しない限り…そしてそれも信頼できません。公式の Twitter クライアント認証キーは出回っています。今)。

リクエストの送信元の URL を確認するだけで十分ですか?

「リファラーヘッダーをチェックする」という意味なら、いいえ。これはクライアントによって設定され、クライアントは好きなように設定できます。

于 2013-03-08T07:00:58.303 に答える
1

おそらく最善の方法は、PHP セッションを確立し、$_SESSION に格納されている ID を JavaScript に送信することです。すべての AJAX POST で、この ID を追加し、サーバー側で $_SESSION に格納されているものを確認します。一致しない場合は、誰かが URL を操作しようとしているか、CSRF が原因です。

元のクライアントがセッション内で複数のリクエストを行うのを防ぎたい場合は、サーバーからクライアントに一度だけ使用できる通知番号を送信する必要があります。参照: http://en.wikipedia.org/wiki/Cryptographic_nonce

于 2013-03-08T07:02:46.870 に答える
0

この行をスクリプトの上に置くことができます

<?php  if ( ! defined('BASEPATH')) exit('Permission denied: direct access');

POSTを送信するphpファイルの最初の行として。

編集->または次のようなもの

 if(!isset($_POST))
   {
      die('no direct access allowed');
   }
   else
   {

     //all your PHP code

    }

投稿に独自の変数を含めて、それを使用することもできます

isset($_POST['あなたの変数'])

チェックする。

于 2013-03-08T07:02:14.467 に答える