Настройка 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 вызовы:

enter image description here

Я знаю, что могу установить следующее и все будет работать, но я боюсь последствий для ценных бумаг (если они есть):

# 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, которая по-прежнему работает как псевдоним, но новое название имеет приоритет.

Вот и все: я могу обновить модуль до новой версии или просто использовать настройки, доступные в моей версии.

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