2012-08-05 14 views
5

私たちは外界に晒され始めた小さなサイトを持っています。ほとんどの場合、非常にうまくいっていますが、フォームの1つから「CSRF FAILURECSRF cookie not set」というメッセージが表示され、403エラーが表示されることがあります。フォームは間違い{% csrf_token %}が含まれている、と私たちのミドルウェアが次のようになります。散発的な403「CSRF FAILURECSRFのクッキーが設定されていません」というエラーがdjangoで発生しました

MIDDLEWARE_CLASSES = (
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

形式は、ほとんどの人のために正常に動作しますが、1日1回約私は失敗ケースで電子メールを取得します。

<WSGIRequest 
path:/main/10/apply/, 
GET:<QueryDict: {}>, 
POST:<QueryDict: {u'csrfmiddlewaretoken': [u'IQQZvbVIggJm6Be6VinPHj8Qn3i3TdmG']}>, 
COOKIES:{}, 
META:{'CONTENT_LENGTH': '111978', 
'CONTENT_TYPE': 'multipart/form-data; boundary=----WebKitFormBoundaryLyo9BPXnAwKnt8ew', 
'CSRF_COOKIE': 'XmSPWJZk2UwS4PNBXRmVlAaYDDdNaGqk', 

CSRF_COOKIEがcsrfmiddlewaretokenと一致しません:電子メールは、この(私はプライベートデータを非表示にPOSTデータの残りの部分を削除したが、csrfmiddlewaretokenを残してきた)のように見える実際の要求は、含まれてこれは私が問題を引き起こしていると推測しているものですが、いくつかの提出物に対してこれらがどのように同期しているのか分からないのです。このページは、ほんのわずかなフィールドしか持たない非常に単純なフォームです。

私はどこから見えるべきですか?私はCentOS上で最新のDjango 1.4.1をmod_wsgiを使ってApacheで実行しています。おそらく彼らはちょうど彼らのブラウザでCookieを無効にしていたが、その後なぜことを疑うように私につながる成功した要求に比べて奇妙に思えるだけ他の事ここにCOOKIES:{}セクションが空であるということです、:

編集METAセクションにCSRF_COOKIEが表示されますか?

ありがとうございました!

ブランドン

+0

私はまったく同じ問題を抱えています。あなたは解決策を見つけましたか? –

+0

並べ替え問題は、一部のユーザーがCookieを無効にしていて、サーバー側からそのCookieを修正する方法がないことでした。私たちは、公に直面しているフォームのCSRF保護を止めました。ログインページやその他の機密データについてはこれを行わないでください。ただし、CSRF保護は必ずしも厳密には必要ではありません。 – brandon

答えて

0

HTTP_COOKIEもブランクですか?

djangoはリクエストにCSRFトークンクッキーが表示されず、という新しい CSRF_COOKIEを生成してメタに入れている可能性があります。