本文详解为何在 cloudflare 代理后 tor 检测失效,并提供安全、可靠的 php 方案:通过正确获取真实客户端 ip(优先使用 `cf-connecting-ip`),再调用 tordnsel 进行权威 dns 黑名单验证,确保 tor 会话识别稳定有效。
在使用 Cloudflare 作为反向代理的 PHP 网站中,直接依赖 $_SERVER['REMOTE_ADDR'] 判断 Tor 用户往往失败——原因在于:Cloudflare 会将原始客户端 IP 替换为自身边缘节点 IP,而 mod_remoteip 若未针对 Cloudflare 的可信头(如 CF-Connecting-IP)正确配置,$_SERVER['REMOTE_ADDR'] 将始终返回 Cloudflare 的任一节点 IP(非真实出口节点),导致 TorDNSEL 查询的目标 IP 错误,自然无法命中 Tor 出口节点黑名单。
✅ 正确做法是优先信任 Cloudflare 提供的 HTTP_CF_CONNECTING_IP 请求头(该头由 Cloudflare 自动注入,且仅在其可信链路中存在,不可被终端用户伪造),并将其作为 Tor 检测的真实源 IP:
getMessage()); }
⚠️ 关键注意事项:
? 总结:Tor 检测失效的根本症结不在 TorDNSEL 库本身,而在于 IP 源的准确性。只要在 Cloudflare 环境中严格采用 HTTP_CF_CONNECTING_IP 获取真实出口 IP,并配合 To
rDNSEL::isTor() 进行标准化查询,即可实现高精度、低误报的 Tor 用户识别——这是兼顾安全性、兼容性与可维护性的最佳实践。