django CSRF disable (CSRF 해제)
django는 기본적으로 CSRF 방어를 강제한다.
그러나 몇몇 상황에서는 CSRF를 끄고 싶은 경우가 있을 것이다.
CSRF. 한 번 꺼보자.
단 정말 꼭 꺼야만 하는지 생각좀 해 보고 꺼야 한다. 보안에 큰 구멍이 생기기 떄문.
방법1 @csrf_exempt 데코레이터 사용
공식 문서에서는 데코레이터를 사용하라고 써 있다.
@csrf_exempt
def someview(request):
return None
뭐 이런 식으로 사용하면 된다. 이 뷰에 한해서는 csrf가 강요되지 않는다.
강력한 방법은 아니다. 왜냐하면 매 번 데코레이터를 붙여야 하며, 데코레이터 궁합이 안 맞을 수 있으며, 데코레이터를 달아도 csrf 때문에 문제가 생기는 경우가 있기 때문.
애초에 django에서 강력한 방법을 제공 안할 만큼 csrf를 끄는 것은 위험한 것임을 감수하고 방법2로...
방법2 middleware 정의
http://stackoverflow.com/questions/16458166/how-to-disable-djangos-csrf-validation 참조
대충 프로젝트 어딘가에 미들웨어 정의를 위한 파이썬 파일을 만들자.
나의 경우 settings.py가 있는 디렉토리에 middlewawre.py라고 만들었다.
미들웨어 코드는 간단하다:
class DisableCSRF(object):
def process_request(self, request):
setattr(request, '_dont_enforce_csrf_checks', True)
이제 이 코드를 settings.py에 반영하자:
MIDDLEWARE_CLASSES = (
'...................................'
'phople.middleware.DisableCSRF',
)
이렇게 하면 방법2가 적용된다.
이 방법은 미들웨어 수준에서 csrf 강제를 해제하는 방법이다. 정말 말 그대로 완전히 기능을 상실한다.
CSRF 기능과 관련해서 아무런 꼬임도 생기지 않을 것이다. 그와 함께 정말 큰 보안 구멍이 생길 것이다.
'WebDev' 카테고리의 다른 글
DRF + CORS + CSRF + AJAX 하에서 개발하기 (0) | 2016.01.21 |
---|---|
django login 정리 (0) | 2016.01.21 |
django class-based view (0) | 2016.01.15 |
Django Url (0) | 2016.01.14 |
Django Deploy (0) | 2016.01.04 |