5

外部の世界に公開され始めたばかりの小さなサイトがあります。ほとんどの場合、非常にうまく機能していますが、フォームの 1 つから「CSRF FAILURECSRF cookie が設定されていません」というメッセージとともに 403 エラーが発生することがあります。フォームには間違いなく が{% csrf_token %}含まれており、ミドルウェアは次のようになります。

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 回程度、エラー ケースに関する電子メールが届きます。電子メールには、次のような実際のリクエストが含まれています (プライベート データを非表示にするために残りの POST データを削除しましたが、csrfmiddleware トークンは残しました)。

<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 と一致しません。これが問題の原因であると私は推測していますが、一部の送信ではこれらがどのように同期していないかを理解できません。このページは、いくつかのフィールドしかない非常に単純なフォームです。

どこを見ればいいですか?Apache経由でmod_wsgiを使用して、CentOSで最新のDjango 1.4.1を実行しています。

編集:成功したリクエストと比較して奇妙に見える唯一の他のことは、ここではCOOKIES:{}セクションが空であることです.メタセクション?

ご協力いただきありがとうございます!

ブランドン

4

1 に答える 1

1

HTTP_COOKIE も空白ですか?

django がリクエストに CSRF トークン Cookie を認識せず、新しいCSRF_COOKIE を生成してメタに配置している可能性があります。

于 2014-01-24T19:39:47.707 に答える