跳转至

伪造请求的 Host 头

Gixy Check ID: host_spoofing

位于 Nginx 后的应用经常依赖正确的 Host 头来生成 URL(重定向、资源、邮件中的链接等)。 伪造该请求头可能引发多种问题,从钓鱼到 SSRF 不等。

注意:你的应用也可能使用 X-Forwarded-Host 请求头来实现此功能。 这种情况下必须确保该请求头被正确设置。

如何发现?

多数情况下,问题源于使用了 $http_host 而不是 $host

两者差异如下: - $host:按以下优先级确定的主机名:请求行中的主机名,或 Host 请求头中的主机名,或与请求匹配的 server_name; - $http_host:即 Host 请求头的原始值。

配置示例:

location @app {
  proxy_set_header Host $http_host;
  # 其他代理参数
  proxy_pass http://backend;
}

如何规避?

所幸结论十分直接: - 在 server_name 指令中列出所有合法的服务器名称; - 始终使用 $host,不要使用 $http_host

更多资料

加固 NGINX,使用维护的 RPM

使用 GetPageSpeed 提供的 NGINX Extras 在 RHEL/CentOS/Alma/Rocky 上获取持续更新的 NGINX 与模块。 了解更多.