Проверка 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-атак.

Вернуться на верх