10

Cookie、CSRF、および Django (1.4 を使用) の初心者であるため、これがどのように機能するかを理解できます。どこが間違っているかを修正してください...

以下は、django.middleware.csrf.CsrfViewMiddleware が MIDDLEWARE_CLASSES タプルに含まれている場合に適用されます。

POST フォームにcsrf_tokenタグが含まれ、関連するビューがRequestContextテンプレートに渡される場合、ページをリクエストすると、Django が英数字文字列を含む非表示のフォーム フィールドを含むことを意味します。また、Django は、名前が に設定されcsrftoken、値が同じ英数字の文字列に設定された Cookie をブラウザに返します。

フォーム送信を受信すると、Django は非表示のフォーム フィールドからの英数字文字列の値と、ブラウザーから受信した csrftoken Cookie が一致することを確認します。それらが一致しない場合、403 応答が発行されます。

CSRF 攻撃は、iframe を含む悪意のある Web サイトの形で行われる可能性があります。iframe には、POST フォームといくつかの JavaScript が含まれています。フォームのaction属性は、私の Django サイトを指しています。フォームは私のサイトで厄介なことをするように設計されており、iframe が読み込まれると JS がフォームを送信します。

ブラウザーはcsrftoken、フォーム送信のヘッダーに Cookie を含めます。ただし、フォームには一致する英数字文字列を含む隠しフィールドが含まれないため、403 が返され、攻撃は失敗します。iframe JS が Cookie にアクセスして正しい非表示のフォーム フィールドを作成しようとすると、ブラウザーはそれを阻止します。

これは正しいです?

4

2 に答える 2

1

私はあなたが正しいと思います。あなたはここでそれの私自身の定式化を見つけるでしょう.

要約する:

  • CSRF トークンはコードから送信されるため、悪意のあるコードはそれを認識している必要があります。
  • CSRF トークンは Cookie に保存され、ブラウザによって送信されます。
  • 攻撃者は同一生成元ポリシーにより、Cookie にアクセスできません。
  • サーバーは、Cookie からの「安全な」値がコードからの値と同じであることを簡単に確認できます。
于 2014-05-23T05:30:19.940 に答える
1

あなたが望むものは、公式の Django ドキュメントで説明されていると思います。 https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works

上記のリンクは試したときに壊れていましたが、バージョン 1.7 ではこれで動作します: https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/

于 2012-09-12T01:23:14.280 に答える