0

編集:CSRFが実際に何であるかについて少し混乱したようです。質問を書き直しました

--

したがって、CSRF の防止に関する投稿がたくさんあることは知っていますが、一般的な方法を回避する方法はたくさんあります。

CSRF トークン- フォームに CSRF トークンを設定し、同じデータを使用して Cookie を割り当て、サーバー側で照合します

ユーザーエージェントの確認- すべてのリクエストに有効なユーザーエージェントがあることを確認する簡単な方法。簡単にバイパスされますが、それでも簡単なチェックです

IP に基づく制限- リクエスタの IP アドレスに基づいてリクエストを制限します。

--

しかし、それはすべて簡単に回避できます。この種のことを防ぐために他に何ができるでしょうか?CAPTCHA 以外でお願いします。

URL 短縮サービスのサンプル サイトを考えてみましょう。

  1. ユーザーがリクエストを送信 -> 短縮 URL を返します。
  2. スクリプトは、(元のフォームから) 有効なリファラーをチェックします -- 簡単に偽装できます
  3. IP アドレスに基づくチェック -- プロキシはこれを簡単に回避します
  4. CSRF トークンをチェックします -- スパマーは、最初に元のサイトにアクセスし、サイトへのリクエストで設定された Cookie + トークンを使用することで、これを簡単に回避できます

他に何ができるかわかりませんか?JavaScript に関しても、これを防ぐために何ができるでしょうか? Cookie にタイムアウトを割り当てることもできますが、スパマーは元のページにアクセスして、自分自身に Cookie を再割り当てするだけです。

他にできることは、リクエストの割合が平均よりも高い場合にスパマーに CAPTCHA を表示することです。しかし、有効なユーザーにもフラグを立てないものが必要です。はい、ユーザーにアカウントの登録を強制することでこれを修正できますが、実行可能ではありません.

ありがとう!

4

2 に答える 2

3

時間。合格です。CSRFを保存する必要があります。どこか。時間が経つにつれて、店は古くなります。特定の期間だけを残し、時間を別の秘密に変える秘密を保持している場合、スパマーは現在に「更新」できません。

ミッソンは成し遂げた。データを渡す方法(HTTPメッセージのどこか、多くの場合、ヘッダーや本文など、複数の場所)は完全に選択できます。

アクションを実行できる特定の時間枠のみを許可するように注意してください。

より高いセキュリティが必要な場合は、ユーザー認証を要求します(資格情報を使用してログインするか、IPおよび要求ヘッダーを含むUA仕様を使用して自動ログインします)。次に、そのセッション内で、攻撃者が予測できない多くの秘密をサーバー側に保持できます。

たとえば、フォームの名前と値を完全に動的に保ちます。入力値を送信する前にjavascriptでローテーションし、ローテーションされた値のみを受け入れます。時間に基づいて回転を変更します。ローテーションを計算するために、秘密の公開部分を現在の1つの時間で共有できるようにします。言ったように、あなたのニーズに応じて。

HTTPのステートレスな性質は、このコンテキストでは弱点のように見えるかもしれません。しかし実際にはそうではありません。これを使って。

于 2012-12-23T01:39:30.823 に答える
0

入力フィールドにランダムな名前を生成してから、スクリプトでそれらすべてを識別させることができます。これはFacebookが行うことと似ており、うまく機能します。

于 2012-12-23T01:45:34.423 に答える