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()
или получить доступ к заголовкам напрямую.