0

次のnginx構成があります

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

URL http://127.0.0.1/test/test2/index.php (POSTMAN から) にアクセスすると、403 が返されます。しかし、ヘッダーに Host -> mydomain.com を追加すると、200 になります。

nginx の構成を追加add_header Host "$host";すると、nginx のホスト変数に mydomain.com が含まれていることに気づきました。nginxのドキュメントによると、意図的にホストヘッダーをhttpリクエストでオーバーライドすると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 -via-http-and-https-to-a-website-using-ip/

4

1 に答える 1

0

URL http://127.0.0.1/test/test2/index.php (POSTMAN から) にアクセスすると、403 が返されます。しかし、ヘッダーに 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 に答える