ALLOWED_HOSTS использует get_host()?

Я немного сбит с толку, когда речь заходит о том, как Django использует кортеж в ALLOWED_HOSTS проверить хост. Использует ли это get_host() позвонить или он использует request.META?

Документация Django указывает на следующее в отношении ALLOWED_HOSTS:

Эта проверка применяется только через get_host(); если ваш код обращается к Host заголовок прямо из request.META Вы обходите эту защиту безопасности.

Если я создаю промежуточное программное обеспечение, которое использует get_host() получить хост и сравнить его со списком утвержденных имен хостов и передать пользователю 404 если домена нет в списке, я предполагаю, что это будет по существу репликация ALLOWED_HOSTS функциональность?

Я задаю этот вопрос, потому что мне, на самом деле нужно написать промежуточное программное обеспечение для замены ALLOWED_HOSTS, Список утвержденных хостов со временем увеличивается, так как все больше пользователей регистрируются. В результате, мой кортеж, с которым я проверяю, является динамическим, и поэтому я не могу использовать значение по умолчанию ALLOWED_HOSTS Конфиг в Джанго.

Спасибо!

1 ответ

ALLOWED_HOSTS ничего не использует, это просто список. Это наоборот: get_host() использования ALLOWED_HOSTS проверить значение Host заголовок. Документация, на которую вы ссылались, прямо говорит об этом:

Если Host заголовок (или X-Forwarded-Host если USE_X_FORWARDED_HOST включен) не соответствует ни одному значению в этом списке, django.http.HttpRequest.get_host() метод поднимет SuspiciousOperation,

Если вы хотите заменить эту проверку своей собственной, просто используйте * за ALLOWED_HOSTS, Поскольку любой хост пройдет проверку в этом случае, не имеет значения, используете ли вы get_host() или получить доступ к заголовкам напрямую.

Другие вопросы по тегам