fn ip_from_x_forwarded_for(
value: &str,
trusted_proxy_count: usize,
) -> Option<String>Expand description
从 X-Forwarded-For 头按可信段数提取真实客户端 IP。
§伪造风险(务必正确配置 TRUSTED_PROXY_COUNT)
XFF 头由客户端可写,本函数以 parts[len-1-trusted_proxy_count] 选取
从右数第 trusted_proxy_count + 1 段。每层代理追加的是自己的对端地址,最外层
代理追加的就是客户端本身,所以 TRUSTED_PROXY_COUNT 应等于 XFF 中真实客户端
IP 右侧的段数,而不是代理层数(CDN + 源站反代两层都追加时取 1)。一旦不符即可被滥用:
- 配得偏大:会选中客户端伪造的地址——攻击者在请求里塞入多个伪 XFF 段, 使选中的「客户端 IP」落为其伪造值,从而绕过按 IP 的限流(每次伪造一个新 IP), 或令多个真实用户被错误归并到同一代理 IP 的桶里。
- 配得偏小:会选中某一跳中间代理的 IP,导致所有用户共享同一个限流桶。
段数不足 trusted_proxy_count + 1 时返回 None,由调用方回退 X-Real-IP。
因此只有单层反代时,该代理须用 $remote_addr 覆盖 XFF(而非追加)并设置
X-Real-IP,再配 1;追加模式下 1 会选中客户端伪造的段。源站还必须只接受上游
代理回源,否则直连源站同样可伪造。