2014-11-14 3 views
3

CSRF 보호 기능을 사용하는 공개 Django 사이트가 있습니다.Django CSRF_COOKIE_DOMAIN - 정상적으로 변경하는 방법

CSRF_COOKIE_DOMAIN을 설정하지 않았습니다. 내 사이트는 하위 도메인을 사용합니다.

간혹 csrftoken 쿠키가 .toplevel.com에 설정되고 sub.toplevel.com에 설정되는 경우가 있습니다. 검사에 잘못된 쿠키가 사용되면 CSRF 검사가 실패하므로 문제가 발생합니다.

CSRF_COOKIE_DOMAIN.toplevel.com으로 설정하고 싶습니다. 그러나 어떤 *.toplevel.com 하위 도메인에 대해서도 csrftoken 쿠키를 삭제하고 싶습니다. 어떻게하면 좋을까요?

다른 쿠키를 삭제하지 않으면 다른 도메인에 같은 이름의 쿠키가 2 개있는 경우가 발생하기 때문에 문제가 발생합니다.

답변

7

비슷한 문제가있었습니다. 내가 처리 한 방법은 CSRF_COOKIE_DOMAIN과 함께 있습니다. CSRF_COOKIE_NAME도 변경하여 오래된 "csrftoken" 쿠키를 사용하지 않게되었습니다.

+0

유일한 단점은 매우 우아한 접근 방식이 아니라는 것입니다 (이 새로운 구성 직후 POST 요청이 실패합니다). –

+2

GET을 한 사람과 직접적인 POST 요청을 한 사람이이 변경을하면 실패합니다. 사이트에 사용자가 많지 않은 경우는 매우 드물지만 큰 문제 (예 : 수천 명의 동시 사용자가있는 경우)는 일시적으로 'django.middleware.csrf.CsrfViewMiddleware'를 무시하여 처리 할 수 ​​있습니다 'process_view' 메쏘드에서 두 쿠키 이름을 모두 확인합니다. –

+0

@AlexeyKuleshevich 내 문제도 도와 줄 수 있습니까? http://stackoverflow.com/q/29559000/4029893. 네가 이해할 것 같아. –