0

我有以下 nginx 配置

if ($host != mydomain.com) {
 return 403;
}

当我点击 url http://127.0.0.1/test/test2/index.php(来自 POSTMAN)时,我得到 403。很好。但是在 Headers 中添加 Host -> mydomain.com 我得到 200。

当我添加add_header Host "$host";nginx 配置时,我注意到 nginx 在其主机变量中有 mydomain.com。根据 nginx 文档,我知道在 http 请求中故意提到 Host 标头会覆盖 127.0.0.1。

但是通过这种方式,攻击者可以绕过 Cloudflare WAF 直接向 Web 服务器发送请求。那么阻止来自nginx的此类请求的解决方案是什么?

我尝试了以下解决方案,但对我不起作用。
https://www.digitalocean.com/community/questions/how-to-block-access-using-the-server-ip-in-nginx https://blog.knoldus.com/nginx-disable-direct-access -通过-http-and-https-to-a-website-using-ip/

4

1 回答 1

0

当我点击 url http://127.0.0.1/test/test2/index.php(来自 POSTMAN)时,我得到 403。很好。但是在 Headers 中添加 Host -> mydomain.com 我得到 200。

如果我理解正确,您似乎认为在您的请求中“添加主机”标头在某种程度上是一种绕过。它不是……它是主机名在 HTTP 中的工作方式。

服务器不会神奇地知道您http://domain.tld/test/在浏览器地址栏中输入的内容。您的浏览器进行 DNS 查找domain.tld并与解析的 IP 地址建立 TCP 连接;然后它发送标头,这是服务器从中获取信息的地方:

GET /test/ HTTP/1.1
Host: domain.tld

这是服务器知道您请求的唯一方式http://domain.tld/test/

于 2020-01-29T09:20:02.310 回答