2

これは以前に尋ねられたと確信していますが、見つけることができなかったので、もう一度尋ねています。

私のサイトでは、ユーザーの電子メールとランダムなサイト固有の属性を保存する ajax 呼び出しがあります。属性付きのリクエスト URL は次のようになります。これは DB 書き込み要求であり、JSON 応答を返します。

http://mysite.com/my-ajax-write-to-db?email=abc@xyz.com&siteattribute=XYZABCDEF

今私が感じている問題は、誰か/ボットがこの URL を知っている場合、このコードがライブになると、DB に大量のジャンクを直接入力できることです。それを止めるにはどうすればいいですか?なにか提案を?暗号化メカニズムを追加する必要がありますか?

4

3 に答える 3

1

Spring で使用されるスタイルをエミュレートする (または Spring を使用する) ことができます。サーバーがページをロードするたびに、csrf トークンの形式でパスキーを発行します。この csrf トークンを ajax リクエストに入れ、サーバー側で検証できます。私は Python プログラマーなので、Java サーバーにはあまり詳しくありませんが、この回答には、おそらく動作するコードへのリンクが含まれています。

編集 Spring を使用しない場合、DeveloperForceは CSRF トークンを実装する 2 つの Java ライブラリをリストしています。Spring MVC は Java で最も人気のある MVC の 1 つであるため、私は自動的に Spring を想定しました。

一般的な経験則として、サーバー側のデータを変更するページは通常、GET ではなく POST にする必要があります。これは、だれかが URL をブックマークしたり、ブラウザの履歴ログを見たりすると、GET データが記録されるためです。

于 2013-05-08T07:49:32.063 に答える
0

Snakes and Coffeeの答えを一般化する:

最初の HTML リクエストを、その JavaScript 内で行われる AJAX リクエストにリンクする必要があります。

これを行うには、作成するすべての AJAX 呼び出しで GUID/ID を渡し、その有効性をサーバー側で確認します。

  • バックエンドが HTML ページをバックエンド言語 (ASP/PHP/Django/etc) からレンダリングして提供している限り、サーバーが最初の HTML リクエストを受け取るときに、GUID を含む隠しタグを HTML に簡単に埋め込むことができます。 GUID をサーバーに保存します。

  • サーバーで有効な GUID を取得したら、設定した時間後に破棄するか、使用回数を設定するか、HTML ページの 1 つのインスタンスが送信する AJAX 要求が多すぎる/速すぎるかどうかを特定することで、特に注意を払うことができます。 .

GUID を使用しても、ブラウザーがそれを取得するとすぐに、ボット/悪意のあるユーザーがそれを取得し、有効な AJAX 要求として使用する可能性があることに注意してください。

そのため、ここでの重要なセキュリティ対策は、ajax のリクエストを単一の HTML リクエストにスコープし、その使用を制限できるようにすることです。

「このページのインスタンスごとに、この ajax リクエストを複数回行う必要があるか?」などの質問を自問してください。-そうでない場合は、サーバー側で発生したときにキャッチすると、悪意があることがわかります.

于 2013-12-16T14:04:26.563 に答える