【发布时间】:2011-12-30 12:46:10
【问题描述】:
我最初的问题是如何enable HTTPS for a Django login page,唯一的回答是建议我 - 将整个网站设置为仅 HTTPS。
鉴于我使用的是 Django 1.3 和 nginx,使网站仅使用 HTTPS 的正确方法是什么?
一个回复提到了a middleware solution,但有一个警告:
Django 在维护 POST 数据时无法执行 SSL 重定向。 请构建您的视图,以便仅在 GET 期间发生重定向。
关于nginx rewriting to https的Server Fault上的一个问题,还提到了POST丢失数据的问题,我对nginx不够熟悉,无法确定解决方案的效果。
还有EFF's recommendation to go HTTPS-only,请注意:
应用程序必须在 cookie 上设置 Secure 属性 设置它。该属性指示浏览器发送 cookie 仅通过安全 (HTTPS) 传输,从不不安全 (HTTP)。
像 Django-auth 这样的应用程序是否能够将 cookie 设置为安全?还是我必须写更多的中间件?
那么,配置 Django/nginx 的组合以实现 HTTPS-only 的最佳方式是:
- 安全
- POST 数据的保存
- cookie 处理得当
- 与其他 Django 应用程序(如 Django-auth)交互,正常工作
- 我不知道的任何其他问题 :)
编辑 - 我刚刚在测试多个浏览器时发现的另一个问题。假设我有 URL https://mysite.com/search/,它有一个搜索表单/按钮。我单击按钮,像往常一样在 Django 中处理表单,然后执行 Django HttpResponseRedirect 到 http://mysite.com/search?results="foo"。 Nginx 根据需要将其重定向到https://mysite.com/search?results="foo"。
然而——当重定向发生时,Opera 有一个可见的flash。每次搜索都会发生这种情况,即使是相同的搜索词(我猜 https 真的不缓存 :) 更糟糕的是,当我在 IE 中测试它时,我首先得到消息:
您即将被重定向到不安全的连接 - 继续?
点击“是”后,紧接着是:
您即将通过安全连接查看页面 - 继续?
虽然第二个 IE 警告有一个关闭它的选项 - 第一个 警告没有,所以每次有人进行搜索并被重定向到结果页面时,他们至少会收到一个警告消息。
【问题讨论】:
标签: django https nginx django-authentication