当谈到django如何使用ALLOWED_HOSTS
中的元组来验证主机时,我有点困惑。是使用get_host()
来电还是使用request.META
?
Django文档指出了关于ALLOWED_HOSTS
的以下内容:
此验证仅适用于
get_host()
;如果您的代码直接从Host
访问request.META
标头,则会绕过此安全保护。
如果我创建使用get_host()
获取主机的中间件并将其与已批准的主机名列表进行比较,并在域名不在列表中时传递用户404
,假设这基本上会复制ALLOWED_HOSTS
功能?
我问这个问题,因为我确实需要编写中间件来替换ALLOWED_HOSTS
。随着更多用户注册,批准的主机列表会随着时间的推移而增长。因此,我验证的元组是动态的,因此,我无法在Django中使用默认的ALLOWED_HOSTS
配置。
谢谢!
答案 0 :(得分:2)
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()
或直接访问标题无关紧要。