2012-08-05 28 views
5

Chúng tôi có một trang web nhỏ chỉ mới bắt đầu được tiếp xúc với thế giới bên ngoài. Đối với hầu hết các phần nó làm việc rất tốt nhưng chúng tôi đôi khi nhận được 403 lỗi với thông báo "CSRF FAILURECSRF cookie không được thiết lập" từ một trong các hình thức. Hình thức chắc chắn có {% csrf_token %} bao gồm, và middleware của chúng tôi trông như thế này:Không thường xuyên 403 "CSRF FAILURECSRF cookie không được đặt" lỗi với 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', 
) 

hình thức hoạt động tốt cho hầu hết mọi người, nhưng khoảng một lần một ngày tôi nhận được một e-mail với một trường hợp thất bại. Các e-mail bao gồm các yêu cầu thực tế, mà trông như thế này (tôi đã gỡ bỏ phần còn lại của dữ liệu POST để ẩn dữ liệu cá nhân, nhưng rời khỏi csrfmiddlewaretoken):

<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', 

các CSRF_COOKIE không phù hợp với csrfmiddlewaretoken , đó là những gì tôi giả định là gây ra vấn đề, nhưng tôi không thể tìm ra cách chúng được ra khỏi đồng bộ cho một số đệ trình nhưng không phải những người khác. Trang này là một biểu mẫu khá đơn giản chỉ với một vài trường.

Bất kỳ đề xuất nào về nơi tôi nên xem? Tôi đang chạy Django mới nhất 1.4.1 trên CentOS bằng cách sử dụng mod_wsgi qua apache.

Chỉnh sửa: Điều duy nhất có vẻ kỳ lạ so với yêu cầu thành công là ở đây phần COOKIES:{} trống, điều này sẽ khiến tôi nghi ngờ rằng có lẽ họ đã tắt cookie trong trình duyệt của họ, nhưng tại sao nó hiển thị với CSRF_COOKIE trong phần META?

Cảm ơn sự giúp đỡ của bạn!

Brandon

+0

Tôi đang gặp sự cố tương tự chính xác này. Bạn đã bao giờ tìm ra một giải pháp? –

+0

Sắp xếp. Vấn đề là một số người dùng đã tắt cookie và không có cách nào để khắc phục điều đó từ phía máy chủ. Chúng tôi đã tắt bảo vệ CSRF cho biểu mẫu công khai. Không làm điều này cho các trang đăng nhập hoặc các dữ liệu nhạy cảm khác, nhưng việc bảo vệ CSRF không phải lúc nào cũng cần thiết. – brandon

Trả lời

0

HTTP_COOKIE cũng trống không?

Có thể là django không thấy cookie mã thông báo CSRF trong yêu cầu và tạo ra một mới CSRF_COOKIE và đặt siêu dữ liệu vào.

Các vấn đề liên quan