2011-01-25 2 views
2

Proxy 뒤에 Django 시스템 (Alfred라고 부름)을 실행해야합니다. 둘 다 동일한 네트워크에 있습니다. 프록시로 나는 yuri vandermeer의 django-httpproxy를 사용합니다. 두 시스템은 모두 시스템이 동일한 (폐쇄) 네트워크와 같은 IP에있는 장고 버전 1.2.4프록시 뒤에 장고의 CSRF 보호를 비활성화하는 방법

를 실행

을 (자신의 페이지 yvandermeer.net 참조). 나는 포트 8000과 알프레드 1337 포트에서 실행되는 프록시를 가지고있다. 나는 그의 admin 사이트를 사용하여 Alfred에 로그온 할 필요가있다. 이것은 장고와 함께 기본적으로 제공된다. 이것은 포트 1337을 통해 작동하지만 포트 8000을 통해 액세스해야합니다.

알프레드는 403 CSRF 오류를 던지고 있으며, 나는 man-in-the- 중간 (- 알프레드는 그 말을 할 때 완전히 옳다).

  1. 나는 내가 disable.py을 만들어
  2. MIDDLEWARE_CLASSES의 settings.py에 CsrfViewMiddleware에서 주석과 미들웨어의 disableCSRF 클래스를 추가 :

    나는 Alfreds CSRF 보호를 해제하는 몇 가지 시도 CLASSES 내가 disable.py을 생성 (질문/1785772)

    #disable.py 
    class DisableCSRF(object): 
        def process_request(self, request): 
         setattr(request, '_dont_enforce_csrf_checks', True)
  3. 이 사이트에 언급 한 것처럼 (실제로 나는 각 [!] 위치를 시도)와 disableCS 추가 http://hi.baidu.com/ledzep2/blog/item/e6b1612e21884c5c4ec2267a.html

    #disable.py 
    class DisableCSRF(object): 
        def process_view(self, request, callback, callback_args, callback_kwargs): 
         setattr(request, '_dont_enforce_csrf_checks', True)
  4. 내가 장고/미들웨어/csrf.py에서 Csfr 보호 메커니즘을 주석 시도했지만 내가 발견 : 여기이 다른 게시물에 언급 한 것처럼 미들웨어 클래스 (다시 나는 각각의 위치를 ​​시도)에 RF 클래스 일의

없음을 일하지 언급/

1,650,941 질문/: 라인 190하지 주위 라인 (160)이 사이트에 언급과 같은 주변의 관련 부분./admin을 통해 로그온하려고하면 403 오류가 발생합니다.

Alfred에서 CSRF 보호를 비활성화하려면 어떻게합니까?/admin에 대해 비활성화하는 것이 가능합니까? 나는 2와 3에서 언급 한 것과 같은 미들웨어로 이것을 할 수 있다면 좋을 것입니다. 4에서와 같이 소스에서 뭔가를 주석으로 달아서는 안됩니다. 미들웨어 방식이 있다면 좋을 것 같습니다.

미리 감사드립니다. :)

답변

0

오류는 모두 내 편이었습니다. 서버 로그를 검사하여 Alfred가 오류가 아니라 Proxy (django-httpproxy)를 던지고 있음을 깨달았습니다. 아마도 두 서버 모두 localhost에서 실행 중이므로 localhost에서도 내 요청을 보내려고합니다. Proxy와 Alfred 모두 CSRF를 비활성화했습니다. 이 설정으로 더 이상 403 오류가 발생하지 않습니다.

불행히도 django-httpproxy는 쿠키를 잃어 버리기 때문에 로그인 할 수 없습니다.

학습 : django-httpproxy를 역방향 프록시로 사용하지 마십시오.

+0

[djproxy] (https://github.com/thomasw/djproxy)가 아마도 더 좋은 선택 일 것입니다. 쿠키 정보를 잃지 않고 구성 및 사용이 더 쉽습니다. – Thomas

3

보기 기능에서 @csrf_exempt 데코레이터를 사용하여 해당보기에서 csrf를 비활성화 할 수 있습니다.
documentation

+0

django.contrib에서 코드를 변경하고 싶지 않으므로.그 뒤에있는 시스템의 인증은 옵션이 아닙니다. – gessulat

관련 문제