2009-11-22 2 views
2

어딘가에 원격 호스트에서 debug = True로 실행되는 응용 프로그램이 있습니다. 이제 어떻게 든 REMOTE_ADDR에 액세스 할 때마다 요청의 출처와 관계없이 127.0.0.1을 반환합니다.Django : request.META [ 'REMOTE_ADDR']은 항상 '127.0.0.1'입니다.

어디에서 시작해야하는지, 왜 이런 일이 발생하는지 잘 모르겠습니다.

답변

6

원격 호스트에서 실행되는 프록시, 게이트웨이 또는로드 균형 조정기를 가지고 있습니까? 이는 연결이 127.0.0.1에서 발생하는 것으로 보입니다 (즉, 웹 서버와 관련하여 인 즉석 연결이기 때문에).

+5

이를 촉진하기 위해, 당신은 X-전달-를 들어 HTTP 헤더가있는 경우,이 원하는 IP를 포함해야 확인할 수 있습니다. – Lepidosteus

+1

당신은 X-Forwarded-For에주의를 기울여야합니다. 쉽게 스푸핑 될 수 있습니다. 실제로 Django는 X-Forwarded-For를 기반으로 REMOTE_ADDR을 자동으로 설정하는 미들웨어를 사용했지만 사람들이 신뢰할 수없는 것에 의존하려고했기 때문에 제거했습니다. –

+0

"쉽게 스푸핑 된"것은 해롭다. 이 헤더에는 특별한 것이 없습니다. 다른 HTTP 헤더와 같습니다. 서버가 프록시를 사용하는 경우 프록시가 기존 X-Forwarded-For 헤더를 삭제 한 후 해당 값으로 대체하는 것이 거의 100 % 확실합니다. 그러나 서버가 프록시 뒤에 있지 않으면 사용자가 해당 헤더를 수동으로 설정할 수 있기 때문에 X-Forwarded-For 헤더에 의존하는 것은 쓸모가 없습니다. 어쨌든 IP 기반 보안 (위험)을 사용할 때 프록시로부터 연결을 절대로 신뢰해서는 안됩니다. – sleblanc

0

웹 서버로 아파치를 실행하고 프록시를 사용하고 있다면 mod_rpaf를 사용할 수 있습니다. 프록시는 X-Forwarded-For 또는 X-Real-IP 헤더 만 보내면됩니다.

http://stderr.net/apache/rpaf/