HTTPS и HSTS на Apache / mod_wsgi и Django

Я настраиваю HTTPS на всем сайте для своего проекта Django 1.8. Я не разбираюсь в веб-безопасности.

Я настраиваю перенаправление HTTP на HTTPS и HSTS.

Прямо сейчас я настраивал это на своем веб-сервере Apache / mod_wsgi (я использую PaaS, поэтому настраиваю его через файл .htaccess в корне WSGI):

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, я m защита файлов cookie в моих производственных настройках:

settings / prod.py

...
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
...

Примечание: я еще не устанавливаю SECURE_PROXY_SSL_HEADER = (“HTTP_X_FORWARDED_PROTO”, “https”), потому что я еще не уверен, проксирует ли PaaS и удаляет ли этот заголовок между прокси и веб-контейнером.

Django (начиная с версии 1.8) теперь поставляется с безопасностью промежуточное ПО (из старого django-secure), которое реализует перенаправления SSL и обрабатывает заголовок HSTS и другие приятные вещи.

Должен ли я позволить Django обрабатывать все конфигурации перенаправления HTTPS / HSTS или делать это на уровне веб-сервера? Каковы последствия каждого выбора для безопасности / производительности?

Литература прочитана / использована:

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_Strictcurity_Transport_NGA_Stricturity_Transport_NGTTP_Strictcurity_Transport_NGTTP_Stricturity_Transport_NGA

https://docs.djangoproject.com/en/1.8/topics/security/ < / а>


person joao figueiredo    schedule 04.09.2015    source источник


Ответы (1)


Вы давно не задавали этот вопрос. Во всяком случае, я столкнулся с подобными сомнениями. В документации неоднозначно следует ли включать HSTS на на уровне приложения или на веб-сервере:

HSTS можно настроить с помощью SECURE_HSTS_SECONDS, SECURE_HSTS_INCLUDE_SUBDOMAINS и SECURE_HSTS_PRELOAD или на веб-сервере.

Контрольный список развертывания (manage.py check --deploy) предлагает установить SECURE_HSTS_SECONDS в рабочей среде.

С другой стороны, в книге Django говорится:

HSTS обычно настраивается на веб-сервере.

Что касается безопасности, то и настройка сервера, и промежуточное ПО django делают одно и то же. Они установили "Strict-Transport-Security" в заголовке ответа. Я считаю, что веб-серверы имеют лучшую производительность, чем промежуточное ПО django, хотя я его не тестировал.

Кроме того, Two Scoops of Django предполагает, что это лучше поставить настройки перенаправления HTTPS на веб-сервер:

С точки зрения производительности лучше делать это на уровне веб-сервера (стр. 347).

person bilbohhh    schedule 05.04.2018