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 にアクセスして正しい非表示のフォーム フィールドを作成しようとすると、ブラウザーはそれを阻止します。
これは正しいです?