0

私は、送信時にJavaScript関数を呼び出すhtmlフォームを持っています。この関数は、Ajaxを使用して、投稿を使用してPHPファイルから情報を取得し、ページに表示します。

問題は、ユーザーが JS メソッドを介してその場所を見つけた場合に直接アクセスできるのではなく、上記の方法を使用する場合にのみ PHP ファイルにアクセスできるようにすることは可能ですか?

編集:人々を助けるためにもう少し情報を追加します。Ajax は、php ファイルが返す内容に基づいて Web サイトのコンテンツを更新するために、外部の php ファイルを呼び出しています。すべての Ajax 呼び出しは JavaScript で行われるため、誰かが関数が使用している場所と引数を簡単に見つけて、基本的に php ファイルを直接呼び出すことができます。これは私が避けようとしているものです。

この場合、PHP セッションを使用するのは少し難しいです。私は Ajax を使用しているため、Ajax を使用して内容を更新しているため、外部 PHP ファイルが完了したらセッションを破棄することはできません。ウェブサイトを更新せずに。

4

4 に答える 4

3

私はリムスコーダーに同意します。

フォームの送信時にトークンを使用する方法を次に示します。

1)初期化してサーバーに保存します(ページがクライアント側に読み込まれる場合)

$token = $_SESSION['token'] = md5(uniqid(mt_rand(),true));

2) フォームに追加する

<input type="hidden" name="token" value="<?php echo $token;?>" />

3) 送信時に、次を使用してトークンを確認します

if(isset($_SESSION['token'], $_POST['token']) && $_SESSION['token'] == $_POST['token'])
{
//code goes here
}
于 2012-07-02T01:50:54.147 に答える
2

クロス サイト リクエスト フォージェリの一種を説明しているようです。これを防ぐ通常の方法は、サーバーが生成したトークンをフォーム値として含め、フォームが送信されたときにユーザーのセッションに保存されている値に対して検証することです。トークンを適切に生成して検証する方法については、リンクを参照してください。

于 2012-07-02T00:45:38.867 に答える
0

HTML ページは保護されていますか? だれかが HTML ページにアクセスして ajax ページを呼び出すことができるのであれば、わざわざ時間をかけて保護しようとする必要はありません。:)

ただし、本当にそうする必要がある場合は、フォームに配置するトークンを生成できるように、html ページを php ページに変換する必要がある場合があります。適切なトークンは、年、月、日、および時間を追加した秘密の文字列の社です。トークンが返送されたら、同じ方法でテスト トークンを生成し、2 つを比較します。これにより、トークンは 1 時間のみ有効になります。当然のことながら、ajax では、ユーザーが時間の最後の分にフォームを取得し、1 時間後に送信した場合に備えて、最後の 1 時間のトークンに対してテストする必要がある場合があります。

編集 --- 主な関心事がボットである場合は、キャプチャ テストを使用してください。

于 2012-07-02T01:00:05.807 に答える
0

HTTP_REFERER (http://php.net/manual/en/reserved.variables.server.php) をチェックすることで、スクリプトを呼び出したページをテストできます。

しかし...なりすましの可能性があるため、データにアクセスしようとする試みを思いとどまらせるだけです

于 2012-07-02T00:34:22.937 に答える