Django 버전에 의존하는 Referrer policy 관련 이슈

문석·2021년 8월 27일
1
실서버의 Python 버전을 업그레이드하며 Django의 버전도 2점대에서 3점대에서 업그레이드를 했는데 이슈가 발생했다. Http referrer 이 사라진 것. 기존 코드에서 referrer + Ip를 이용한 접근 방어 로직이 있었는데 장고 3점대로 변경하며 이슈가 발생했다😂
장고 2에서 3.1 이상의 버전으로 가며 어떤 기본 스펙이 달라졌을까 찾아보니..

https://chipcullen.com/django-3-referrer-policy-change/
https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-SECURE_REFERRER_POLICY

위 링크에 있는 부분인데 장고의 default secure_referrer_policy가 변경되었다더라..
장고 3.1 버전부터 장고 default SECURE_REFERRER_POLICY 가 None → Same Origin 으로 변경되었고 이는 기존 로직에서 referrer을 필요로 하는 부분에 referrer을 받지 못하게 만들었다.

referrer 간단 요약

strict-origin-when-cross-origin (장고에서 None 으로 설정했을 경우, 이슈 발생하기 전의 정책)
- https를 사용하며 웹사이트가 같을 때는 전체주소, 다를 때는 도메인 주소만 남김.
- http를 사용하는 웹사이트에는 주소를 남기지 않음.
same-origin(장고 3.1 이후의 기본 정책. 이슈가 발생한 정책)
- 도메인주소가 같을 때 주소를 남김.
ex) https://velog.io/@moonseok 에서 https://velog.io/@moonseok/something 으로 요청시 주소를 남김
- 서브도메인만 같으면 주소를 남기지 않음
ex) https://velog.io/@moonseok 에서 https://xx.velog.io/@moonseok 으로 이동할때는 주소를 남기지 않음

초간단해결법

장고 settings.py 에
SECURE_REFERRER_POLICY = None 으로 설정하면 same-origin policy가 사라진다. 하지만 디폴트 설정에는 이유가 있는 법. 해당 설정은 최대한 자제해보도록 하자.

0개의 댓글