0

次のような return.php というスクリプトに AJAX リクエストを送信しています。

http://www.example.com/return.php?type=3&filter=2

これは、ブラウジング ユーザーが example.com でボタンを押したときに発生します。

サイトを閲覧しているユーザーのみがリクエストできるように、追加のセキュリティ対策が必要です。直接入力などはありません。

そのため、ランダムに生成されたキーをリクエストと一緒に送信することを考えていました。return.php で正しいキーが送信されたことを確認するには、どの方法を使用しますか?

キーを生成して、return.php でアクセス可能なセッション変数に保存できますか?

擬似コード:

 if ($random_key_sent == what it should){
      //go ahead and execute code
    }
else{
     //sorry can't help
    }

最終的に、私のリクエストは次のようになります。

http://www.example.com/return.php?type=3&filter=2&key=8fu5jtugy489kgvuri09984ufjlgi (or whatever the key would be)

要するに、return.php が必要なときにのみ使用されるように、API キーなどを使用するのと同様の方法で、ある種の追加のセキュリティを生成する方法を探しています。

4

3 に答える 3

1

クロスサイト リクエスト フォージェリ(CSRF または XSRF) 保護を探しています。

通常、アンチ CSRF トークンを生成してユーザーのセッション データに保存し、非表示のフォーム フィールドに配置するか (GET または POST を使用)、通常のリンクの場合はクエリ パラメータにトークンを配置します。サーバー側では、アンチ CSRF トークンがユーザーのセッション データのトークンと一致することを確認します。

HTTPrefererヘッダーをチェックするだけで、同じレベルのセキュリティを実現できると言う人もいます。これは機能しますが、プライバシー上の理由でリファラーをブロックできるため、信頼性は低くなります。

于 2013-06-18T21:34:57.687 に答える
1

「直接型入力」について心配しているが、それでも GET リクエストを使用する必要がある場合は、PHP のリクエスト ヘッダーをチェックして、$_SERVER['HTTP_X_REQUESTED_WITH'].

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    // Do what you need to do
} else {
    die("Ajax Only");
}

( David Walshから変更)

于 2013-06-18T21:17:40.147 に答える
-2

PHP コードがチェックし、ブラウザが受信して URL で送信できるプリセット キーのリストを用意しない限り、特定の値のキーをチェックすることは実際的ではありません。$_GET["key"]配列値が設定されているかどうかを確認できます。

if(isset($_GET["key"])){
    // go ahead and execute code
}else{
    // sorry can't help
}

または、 Web ページへのリクエストと共に送信されるが、アドレス バーに入力できないPOSTデータを設定するようブラウザに要求することを検討することもできます。次に、確認するの$_POST["key"}ではなく、単に使用します。$_GET["key"]

于 2013-06-18T21:13:38.817 に答える