Nginx - 伪造主机头

Nginx - 伪造主机头

Django 应用程序依赖于主机标头来获取某些链接等。在我的设置中,我有一个 django 应用程序在 nginx 后面运行作为反向代理(使用非默认server_name

根据:

https://docs.djangoproject.com/en/3.1/topics/security/#host-header-validation

例如,即使 Apache 配置为你的 Django 网站从设置了 ServerName 的非默认虚拟主机提供服务,HTTP 请求仍然有可能匹配此虚拟主机并提供​​虚假的 Host 标头

我找不到任何关于是否可以或如何在 nginx 中完成此操作的信息。

在 webapp 中盲目地允许依赖来自 nginx 的标头真的不安全吗?

答案1

要将标头传递Host:到反向代理应用程序,请将以下内容添加到server/location块中:

proxy_set_header Host $host;

最终可能的值取决于 nginx 虚拟主机配置$host

如果您的server块是一个default_server块,则意味着服务器块将处理发送到任何虚拟主机的任何请求。在这种情况下,Host标头的值将传播到上游服务器。

为了防止出现这种default_server情况,请使用此版本:

proxy_set_header Host example.com;

example.com你的域名在哪里?

更好的方法是正确配置 nginx,以便default_server块始终返回 404,并使用具有正确名称的适当虚拟主机。

相关内容