如何确保请求真的被 CloudFlare 代理了?

How to ensure that a request is really proxied by CloudFlare?

在其中一个项目中,我们使用 CloudFlare 及其 cf-connecting-ip header 来获取访问者 IP 地址。但我不确定这些信息是否可以完全信任。例如,恶意用户以某种方式获得了我们服务器的真实 IP,并直接连接到它,将假 IP 地址添加到 cf-connecting-ip header,并假装它是合法的 CF-proxied请求。

我检查了 header 的 CF-proxied 请求,并看到了 cf-request-id header。但每个请求都是唯一的,我看不到任何固定的安全密钥,我可以用它来验证请求是否合法。

如何确保一个请求真的被 CF 代理了?

您可能想使用 Cloudflare 的 Authenticated Origin Pulls 功能:

Authenticated Origin Pulls let origin web servers strongly validate that a web request is coming from Cloudflare.
We use TLS client certificate authentication, a feature supported by most web servers, and present a Cloudflare certificate when establishing a connection between Cloudflare and the origin server.
By validating this certificate in origin server configuration, access can be limited to Cloudflare connections.

您需要从 Cloudflare 下载客户端证书并配置您的网络服务器以强制执行证书检查。

参考页面包含有关如何在 Apache 和 Nginx 中设置客户端证书的说明。