“Что такое разрешенные_хосты в Django?”
При разработке веб-приложения с использованием Django очень важно понимать концепцию «разрешенных_хостов». В Django параметр ALLOWED_HOSTS
— это мера безопасности, которая помогает предотвратить несанкционированный доступ к вашему приложению, позволяя обслуживать ваше приложение только указанным хостам. В этой статье блога мы рассмотрим параметр allowed_hosts
в Django и приведем примеры кода различных методов его эффективной настройки.
Понимание ALLOWED_HOSTS
:
Параметр ALLOWED_HOSTS
представляет собой список допустимых имен хостов/доменов, которые Django считает безопасными для обслуживания приложения. Когда запрос делается к приложению Django, оно сравнивает заголовок Host
запроса со значениями, указанными в ALLOWED_HOSTS
. Если заголовок Host
соответствует любому из разрешенных хостов, запрос считается безопасным, и Django продолжает обслуживать ответ; в противном случае возникает исключение SuspiciousOperation
.
Методы настройки ALLOWED_HOSTS
:
-
Базовая конфигурация:
В модуле настроек вашего проекта Django (обычноsettings.py
) вы можете установить дляALLOWED_HOSTS
список допустимых хостов. имена или IP-адреса.# settings.py ALLOWED_HOSTS = ['example.com', 'www.example.com', '192.168.0.1']
-
Субдомен с подстановочными знаками:
Django позволяет использовать поддомены с подстановочными знаками в настройкеALLOWED_HOSTS
. Это позволяет считать действительными все субдомены определенного домена.# settings.py ALLOWED_HOSTS = ['.example.com']
-
Динамическая конфигурация.
Вы можете динамически настраивать параметрALLOWED_HOSTS
на основе переменных среды или условий. Этот подход полезен при развертывании приложения в различных средах.# settings.py import os if os.environ.get('ENVIRONMENT') == 'production': ALLOWED_HOSTS = ['example.com'] else: ALLOWED_HOSTS = ['localhost', '127.0.0.1']
-
Несколько доменов.
Если ваше приложение Django обслуживает несколько доменов, вы можете настроитьALLOWED_HOSTS
соответствующим образом, динамически извлекая хост из объекта запроса.# settings.py ALLOWED_HOSTS = [] def get_allowed_hosts(): from django.http import HttpRequest request = HttpRequest() allowed_hosts = [] # Retrieve domains from the database or any other source domains = ['example.com', 'example.net'] for domain in domains: request.META['HTTP_HOST'] = domain if request.get_host() not in allowed_hosts: allowed_hosts.append(request.get_host()) return allowed_hosts ALLOWED_HOSTS = get_allowed_hosts()
Понимание и правильная настройка параметра allowed_hosts
в Django имеет решающее значение для безопасности вашего веб-приложения. Ограничивая доступ только доверенным хостам, вы можете предотвратить несанкционированные запросы и потенциальные уязвимости безопасности. В этой статье мы рассмотрели различные методы настройки ALLOWED_HOSTS
, включая базовую настройку, субдомены с подстановочными знаками, динамическую настройку и работу с несколькими доменами.