Django 1.6.4 응용 프로그램에 POST 요청을하는 AJAX 코드가 있습니다. 이보기에는 django.middleware.csrf.CsrfViewMiddleware
을 통해 CSRF 보호가 활성화되어 있습니다. 쿠키를 전달하지 않고 HTTP_X_CSRFTOKEN을 전달하면 실패합니다.Django 1.6 csrf 쿠키가없는 경우 HTTP_X_CSRFTOKEN 헤더가 무시됩니다.
나는 django.middleware.csrf.CsrfViewMiddleware
코드를보고 있는데, 161 행에서 쿠키에서 가져온 후 if csrf_token is None:
인지 확인합니다. None이면 반환합니다. 이후에만 csrfmiddlewaretoken
매개 변수와 HTTP_X_CSRFTOKEN
요청 헤더를 확인합니다. 이것은 틀린 것으로 보이며 누락 된 csrf_token 값에 대한 점검은 발견 될 수있는 모든 가능한 위치를 확인한 후에 만 이루어져야합니다.
그 외 다른 유사한 문제가 있습니까? 내가 잘못 본 건가요?
저는 'beforeSend'에 대해 알고 있고 그것을 사용하고 있습니다. HTTP 헤더는 X-CSRFToken이라고 불리우는 반면 Django는 HTTP_X_CSRFTOKEN을 HTTP_를 앞에 붙여서 사용할 수 있습니다. https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.META를 참조하십시오. 그러나 이것은 내 문제가 아닙니다. 나는 헤더 값을 제공하고 Django는 그것을 보지 않는다. (원래 게시물에서 언급 한 Django 소스를 보자.) –
내 대답을 업데이트했다. – Eagllus