Настройка django cors_allowed_origin не работает, возможные последствия для ценных бумаг
Я хотел бы ограничить использование моего api некоторыми источниками, но мне трудно заставить это работать даже в самом базовом сценарии. мои настройки ключа django следующие:
INSTALLED_APPS = [
'grappelli',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
'rest_framework',
'rest_framework.authtoken',
'dj_rest_auth',
'rest_framework_simplejwt',
'users.apps.UsersConfig',
'trainings.apps.TrainingsConfig',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'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',
'users.middlewares.MoveJWTRefreshCookieIntoTheBody'
]
DEBUG = True
ALLOWED_HOSTS = []
CORS_ALLOWED_ORIGINS = [
"http://localhost:8080",
"http://127.0.0.1:8080",
"http://0.0.0.0:8080",
]
CORS_ALLOW_CREDENTIALS = True
Насколько я знаю, все мои настройки соответствовали документации: https://github.com/adamchainz/django-cors-headers
но это просто не работает, и я все еще получаю проблему CORS, когда frontend пытается сделать api вызовы:
Я знаю, что могу установить следующее и все будет работать, но я боюсь последствий для ценных бумаг (если они есть):
# CORS_ALLOWED_ORIGINS = [
# "https://example.com",
# "https://sub.example.com",
# "http://localhost:8080",
# "http://127.0.0.1:8080",
# "http://0.0.0.0:8080",
# ]
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
моя django-app работает как контейнер docker. Фронтенд - это другой проект, использующий vuejs app, слушающий порт 8080 (без использования docker).
Моя проблема и вопрос по безопасности заключается в следующем: Я хочу реализовать аутентификацию с помощью jwt + cookies, насколько это может быть плохо для безопасности системы, если я просто откажусь и не буду ограничивать никаких источников вообще; я имею в виду, моя система будет более склонна к CSRF атаке? Будет ли это хуже/небезопаснее, чем просто использовать стратегию jwt + localstorage для аутентификации?
ALLOWED_HOSTS = ['localhost']
Делайте это, все в порядке.
Виноват, я понял, что использовал старую версию модуля (django-cors-header==3.2.1)
. Поскольку это старая версия, название настройки не CORS_ALLOWED_ORIGINS
, а CORS_ORIGIN_WHITELIST
. Поэтому все, что мне нужно было сделать, это изменить следующее:
CORS_ALLOWED_ORIGINS = [
"http://localhost:8080",
]
на это:
CORS_ORIGIN_WHITELIST = [
"http://localhost:8080",
]
док указал на это здесь:
CORS_ALLOWED_ORIGINS: Sequence[str]
A list of origins that are authorized to make cross-site HTTP requests. Defaults to [].
An Origin is defined by the CORS RFC Section 3.2 as a URI scheme + hostname + port, or one of the special values 'null' or 'file://'. Default ports (HTTPS = 443, HTTP = 80) are optional here.
The special value null is sent by the browser in "privacy-sensitive contexts", such as when the client is running from a file:// domain. The special value file:// is sent accidentally by some versions of Chrome on Android as per this bug.
Example:
CORS_ALLOWED_ORIGINS = [
"https://example.com",
"https://sub.example.com",
"http://localhost:8080",
"http://127.0.0.1:9000",
]
Previously this setting was called CORS_ORIGIN_WHITELIST, which still works as an alias, with the new name taking precedence.
здесь: Ранее эта настройка называлась CORS_ORIGIN_WHITELIST, которая по-прежнему работает как псевдоним, но новое название имеет приоритет.
Вот и все: я могу обновить модуль до новой версии или просто использовать настройки, доступные в моей версии.