11

では、GAE アプリケーションに対する XSRF 攻撃を防ぐ最善の方法は何でしょうか? 次のことを想像してください。

  1. 誰でもユーザーの公開オブジェクトを見ることができ、db.Model id を要求で使用して、表示するオブジェクトを特定します。悪意のあるユーザーが ID を取得しました。
  2. 悪意のあるユーザーが独自のオブジェクトを作成し、削除フォームをチェックアウトします。彼らは、特定の ID を持つオブジェクトを削除する方法を知っています。
  3. 悪意のあるユーザーが無実のユーザーに、そのユーザーのオブジェクトの削除要求を送信させます。

#3 を防ぐためにどのような手順を追加できますか? ID と言うときは、キーの実際の ID 部分を使用していることに注意してください。私が持っていた 1 つのアイデアは、削除要求で完全なキー値を使用することでしたが、悪意のあるユーザーがこれを理解するのを防ぐことができますか? 私が知る限り、キーはモデル クラス タイプ、アプリ ID、およびオブジェクト インスタンス ID の組み合わせであるため、必要に応じて ID からキーを導出できる可能性があります。

他のアイデアはありますか?Jeff はこれについて投稿し、いくつかの方法を提案しました。リクエストごとに変更される非表示のフォーム値と、js を介してフォームに書き込まれる Cookie 値です。javascript 以外のユーザーを除外したくないので、Cookie ソリューションは役に立ちません。非表示のフォーム値の場合、削除可能なオブジェクトを表示するすべてのリクエストでデータストアへの書き込みを行う必要があります。スケーラブルなアプリケーションにとって理想的な状況ではありません。アプリ!

そこに他のアイデアはありますか?

4

3 に答える 3

5

シンプル: リファラーを確認します。Javascript や HTML フォームなどを使用してこれを設定することは (意図的に) 不可能です。空白の場合 (一部のプロキシやブラウザーはリファラーを削除します)、または自分のサイトから、またはより具体的には予想されるソースからの場合は許可します。それ以外の場合は、拒否してログに記録します。

編集: Jeff は、CSRF 攻撃を防ぐためのいくつかの方法を記載したフォローアップ記事を書きました。

于 2008-10-13T20:20:33.667 に答える
4

フォームを表示するサーバーの応答で、マジック ハッシュを作成します (クライアント IP + 日付/時刻 + ランダム ソルトなどに基づいて)。それをクッキーに入れて、サーバー上のどこかに保存します。送信アクションの処理中に、データベース エントリに対して Cookie ハッシュを確認します。

そのようなハッシュがない場合、または異なる場合は、送信を拒否します。

送信が成功したら、ハッシュ エントリを削除し、その状態を送信済みに変更できます。

多くの場合、その方法はあなたを保護するはずですが、確かに 100% 防弾ではありません。

CSRF に関する記事を検索してください。おそらく、このStack Overflowに関する良い回答が見つかるでしょう。;)

リファラー チェックやクライアント IP 検証を行わないでください。エラーが発生しやすく (リファラー情報は、ユーザー エージェント、プロキシ、またはユーザーの設定によって消去される可能性があります)、フォームの作成と送信の間でクライアントの IP が変更される可能性があります。 t 動的 IP アドレスの割り当てでユーザーを罰する。

于 2008-10-15T14:38:52.607 に答える