我试图将我的django应用程序锁定为仅HTTPS访问。如果只有SESSION_SAVE_EVERY_REQUEST为True或者如果只有SESSION_COOKIE_SECURE为True,那么一切似乎都能正常工作,但如果我的设置中两者都为True,那么request.session将变为空白,从而破坏整个站点的用户身份验证。
我认为这是因为我有HTTP请求重定向到HTTPS但在它们这样做之前会触发会话保存,并且会创建一个新的,覆盖匿名用户的sessionid,因为该HTTP请求不会。 t发送好的sessionid cookie。我看到了这一点,因为登录表单提交返回一个sessionid cookie,但从http:... / home到https:... / home的重定向返回一个新的sessionid cookie值,从那时起使用。
我可能没法删除SESSION_SAVE_EVERY_REQUEST,但我想尝试保留该功能,而且这些http重定向无论如何都是浪费。
首先,我尝试在wsgi.py中添加以下内容,以查看此问题 - https://security.stackexchange.com/questions/8964/trying-to-make-a-django-based-site-use-https-only-not-sure-if-its-secure
if not os.environ.get('DEVELOPMENT'):
os.environ['HTTPS'] = 'on'
os.environ['wsgi.url_scheme'] = 'https'
但是django.shortcuts.redirect(' /')和django.contrib.auth.decorators.login_required仍然会使用http而不是https重定向,因此非常令人困惑。
如果这不是正确的方法,那么我唯一的另一个想法是SESSION_SAVE_EVERY_REQUEST的自定义实现,它只对HTTPS请求执行。有人曾尝试过吗?
答案 0 :(得分:4)
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
参考:https://docs.djangoproject.com/en/dev/ref/settings/#secure-proxy-ssl-header