Проверка CSRF не удалась за Route 53
У меня есть докеризованное приложение Django, использующее Gunicorn и Nginx. При входе на страницу администратора с использованием localhost ошибка CSRF не возникает. При запуске докера на Amazon EC2 с Route 53 в качестве прокси-сервера (https перенаправляется на http), я получаю ошибку CSRF при входе. Я отмечаю следующее в моем файле settings.py (я добавил SECURE_SSL_REDIRECT = False, но это не дало никакого эффекта):
ALLOWED_HOSTS = ['localhost', '.website_name.ca']
SECURE_SSL_REDIRECT = False
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'The6ixDjango.apps.The6IxdjangoConfig',
]
MIDDLEWARE = [
'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',
]
Учитывая, что у меня есть Route 53 на front-end, "безопасно" ли удалить ссылку на промежуточное ПО csrf в списке MIDDLEWARE?
Поскольку вы используете прокси, который преобразует https запросы в http, вам нужно настроить Django на разрешение POST запросов с другой схемы ( начиная с Django 4.0), добавив это в settings.py
:
CSRF_TRUSTED_ORIGINS = ["https://yourdomain.com", "https://www.yourdomain.com"]
Если это не решит вашу проблему, вы можете временно установить DEBUG = True
в production и попробовать снова. На странице ошибки вы увидите "Reason given for failure", которую вы можете опубликовать здесь. (Вы пишете об "ошибке CSRF при входе", но есть 9 возможных ошибок, было бы полезно знать фактическую ошибку.)
SECURE_SSL_REDIRECT
действительно должно быть False
(поскольку Route 53 будет обрабатывать перенаправление для вас), но False
является значением по умолчанию, поэтому вы можете просто опустить настройку SECURE_SSL_REDIRECT
.
Определенно небезопасно удалять CsrfViewMiddleware
из списка MIDDLEWARE
. Маршрут 53 не даст вам эквивалентной защиты от CSRF-атак.