Неверные настройки HSTS и HTTPS - PullRequest
0 голосов
/ 13 июня 2019

Я установил несколько настроек, как сказано в документе django, но у меня возникли две проблемы:

  1. SecurityMiddleware не работал
  2. один раз SECURE_SSL_REDIRECT = True сайт не может бытьпосещено

SecurityMiddleware предполагается установить Strict-Transport-Security: max-age=31536000; includeSubDomains - заголовок ответа, но я проверяю по Chrome F12, заголовок ответа выглядит так:

Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Thu, 13 Jun 2019 02:18:17 GMT
Server: openresty/1.15.8.1
Set-Cookie: uid=e59e2b54f7d64a6799b0f160dc80fae6; expires=Sun, 10 Jun 2029 02:18:17 GMT; HttpOnly; Max-Age=315360000; Path=/
Transfer-Encoding: chunked
X-Frame-Options: SAMEORIGIN

нет Strict-Transport-Безопасность в нем

Я использую nginx для перенаправления, но я все еще задаюсь вопросом, почему SECURE_SSL_REDIRECT = True вызывает посещение сайта unavliabe, и если этот параметр оказывает другое влияние?Chrome показывает ERR_TOO_MANY_REDIRECTS

настройки Django:

MIDDLEWARE = [
   # 'django.middleware.cache.UpdateCacheMiddleware',
    'blog.middleware.user_id.UserIDMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ALLOWED_HOSTS = ['www.xxxxxx.club']

#SECURE_SSL_REDIRECT = True
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True

1 Ответ

0 голосов
/ 13 июня 2019

Я понял две проблемы, две проблемы, вызванные одной и той же причиной.я использую nginx в качестве прокси и устанавливаю HTTP перенаправления на HTTPS в nginx, но

прокси-сервер может «проглотить» тот факт, что запрос является HTTPS, используя не-HTTPS соединение между прокси и Django

, поэтому django всегда получает HTTP-запрос, при этом SECURE_SSL_REDIRECT = True перенаправляет все http на HTTPS, но все эти HTTPS снова станут http между прокси и Django, что является причиной перенаправления бесконечности.

, если SECURE_SSL_REDIRECT = False django не будет перенаправлять http из nginx, а django будет устанавливать только strict-transport-security в заголовке ответа HTTPS, поэтому, хотя мой браузер получает ответ https (по nginx, без django), нет strict-transport-security в заголовке ответа, поэтому я изменил некоторые настройки:

  1. установить SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') в настройках django
  2. установить proxy_set_header X-Forwarded-Proto $scheme; в расположении внутри порта 443 nginx conf

https://github.com/richardcornish/django-removewww/issues/1 https://docs.djangoproject.com/en/2.1/ref/settings/#std:setting-SECURE_PROXY_SSL_HEADER https://stackoverflow.com/a/41488430/11350098

...