我为我的Django 1.8项目设置了站点范围的HTTPS。我对网络安全没有经验。
我正在设置HTTP到HTTPS重定向和HSTS。
现在,我正在我的Apache / mod_wsgi Web服务器上配置它(我使用PaaS,所以我通过WSGI根目录上的.htaccess文件配置它):
WSGI / htaccess的
# Redirect HTTP to HTTPS
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
# Add HSTS header
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
# Deny rendering inside an iframe
Header always set X-Frame-Options DENY
根据Django官方文档SSL recommendations,我在我的生产环境中保护了Cookie:
设置/ prod.py
...
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
...
注意:我还没有设置SECURE_PROXY_SSL_HEADER = (“HTTP_X_FORWARDED_PROTO”, “https”)
,因为我还不确定PaaS是否代理并在代理和Web容器之间剥离此标头。
Django(截至1.8)现在附带了security middleware(来自旧的django-secure),它实现了SSL重定向,并处理了HSTS标头和其他好东西。
我应该让Django处理所有HTTPS重定向/ HSTS配置,还是在Web服务器级别执行?每种选择的安全/性能影响是什么?
读/读参考:
https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
https://garron.net/crypto/hsts/hsts-2013.pdf
https://mozilla.github.io/server-side-tls/ssl-config-generator/
http://www.marinamele.com/2014/09/security-on-django-app-https-everywhere.html
https://raymii.org/s/tutorials/HTTP_Strict_Transport_Security_for_Apache_NGINX_and_Lighttpd.html
答案 0 :(得分:0)
自从您提出问题以来已经有一段时间了。无论如何,我面临着类似的疑虑。 The documentation是否应该在应用级别或网络服务器上启用HSTS是不明确的:
HSTS可以配置SECURE_HSTS_SECONDS,SECURE_HSTS_INCLUDE_SUBDOMAINS和SECURE_HSTS_PRELOAD,也可以配置在Web服务器上。
The deployment checklist(manage.py check --deploy
)建议在生产中设置SECURE_HSTS_SECONDS。
另一方面,Django book表示:
HSTS通常在Web服务器上配置。
考虑到安全性,服务器设置和django中间件都做同样的事情。他们建立了严格的运输安全"作为回应标题。我相信网络服务器比django中间件有更好的性能,但我还没有测试过它。
此外,Two Scoops of Django建议将HTTPS重定向设置放到网络服务器上更好:
在性能方面,最好在Web服务器级别执行此操作(第347页)