You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防范通过反向代理伪造授权源的请求伪造攻击?

解决付费类库请求过滤的反向代理伪造问题

核心问题在于:HTTP头(包括X-Forwarded-For)和客户端IP都是可篡改的,仅靠这些验证无法防范恶意伪造。以下是几个务实的解决思路:

1. 严格管控可信代理,阻断直接访问

如果你的服务部署在反向代理(如Nginx、Cloudflare)之后,必须:

  • 配置后端服务只接受来自可信代理的请求,禁止外部直接访问后端端口。
  • 在可信代理中配置X-Forwarded-For的正确传递逻辑,确保代理只添加真实客户端IP,不允许用户自行设置的头覆盖。例如Nginx配置:
server {
    listen 80;
    # 只允许可信代理IP访问后端
    allow 192.168.1.0/24; # 你的代理服务器IP段
    deny all;

    location / {
        proxy_pass http://backend:8080;
        # 只添加真实客户端IP到X-Forwarded-For,不保留用户伪造的头
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

后端只读取可信代理传递的X-Forwarded-For作为真实IP,彻底避免用户伪造IP的可能。

2. 把License Key和请求源强绑定

不要仅验证License的有效性,要将其与真实请求源绑定:

  • 生成License时,关联客户的注册域名/服务器IP,License中包含这些信息并做签名(比如用HMAC-SHA256)。
  • 验证阶段:
    1. 先验证License的签名完整性,确保未被篡改;
    2. 再检查可信代理传递的真实IP/域名是否与License中绑定的源一致。
      伪代码示例:
def verify_license(license_key, real_client_ip):
    # 解析License,提取绑定的IP/域名和签名
    license_data = decode_license(license_key)
    # 验证签名
    expected_signature = hmac_sha256(license_data['content'], secret_key)
    if license_data['signature'] != expected_signature:
        return False
    # 验证请求源是否匹配
    if real_client_ip not in license_data['allowed_ips']:
        return False
    return True

3. 放弃客户端可控头的依赖

Referer、Origin完全由客户端控制,篡改成本极低,不能作为核心验证依据,只能作为辅助判断。真正有效的源验证必须基于可信代理提供的真实IP,或License绑定的信息。

4. 本地请求的特殊防护

针对localhost请求,可通过以下方式区分真实本地和伪造请求:

  • 检查请求的源端口是否为本地端口范围(如1024-65535,仅作辅助判断);
  • 在本地开发环境中,要求类库与服务共享一个本地临时密钥(比如通过环境变量或本地配置文件传递),只有携带该密钥的localhost请求才被允许;
  • 限制本地访问仅在特定环境下开启(如设置ALLOW_LOCAL_ACCESS=true的环境变量,生产环境默认关闭)。

5. 网络层加固

  • 用云服务商的安全组/防火墙,只允许可信代理IP、注册客户的服务器IP、本地回环IP(127.0.0.1、::1)访问后端服务;
  • 如果是容器部署,用Kubernetes NetworkPolicy限制Pod的访问来源。

内容的提问来源于stack exchange,提问作者mw222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:57:12