Apache / mod_wsgi和Django上的HTTPS和HSTS

时间:2015-09-04 20:10:39

标签: django apache security https hsts

我为我的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://cipherli.st/

https://mozilla.github.io/server-side-tls/ssl-config-generator/

https://security.stackexchange.com/questions/8964/trying-to-make-a-django-based-site-use-https-only-not-sure-if-its-secure

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

https://docs.djangoproject.com/en/1.8/topics/security/

1 个答案:

答案 0 :(得分:0)

自从您提出问题以来已经有一段时间了。无论如何,我面临着类似的疑虑。 The documentation是否应该在应用级别或网络服务器上启用HSTS是不明确的:

  

HSTS可以配置SECURE_HSTS_SECONDS,SECURE_HSTS_INCLUDE_SUBDOMAINS和SECURE_HSTS_PRELOAD,也可以配置在Web服务器上。

The deployment checklistmanage.py check --deploy)建议在生产中设置SECURE_HSTS_SECONDS

另一方面,Django book表示:

  

HSTS通常在Web服务器上配置。

考虑到安全性,服务器设置和django中间件都做同样的事情。他们建立了严格的运输安全"作为回应标题。我相信网络服务器比django中间件有更好的性能,但我还没有测试过它。

此外,Two Scoops of Django建议将HTTPS重定向设置放到网络服务器上更好:

  

在性能方面,最好在Web服务器级别执行此操作(第347页)