A-A+

常用的IP相关请求头

2025年06月19日 18:48 学习笔记 暂无评论 共4031字 (阅读1,003 views次)

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

1. 代理和负载均衡相关

X-Forwarded-For: 203.0.113.1, 198.51.100.2
X-Real-IP: 203.0.113.1
X-Client-IP: 203.0.113.1
X-Forwarded: for=203.0.113.1
X-Cluster-Client-IP: 203.0.113.1

2. CDN服务商特定头部

# Cloudflare
CF-Connecting-IP: 203.0.113.1
CF-IPCountry: US

# AWS CloudFront
CloudFront-Viewer-Address: 203.0.113.1:12345

# Google Cloud
X-Appengine-Remote-Addr: 203.0.113.1

3. 其他常见头部

Client-IP: 203.0.113.1
True-Client-IP: 203.0.113.1
X-Original-Forwarded-For: 203.0.113.1
X-Remote-IP: 203.0.113.1
X-Remote-Addr: 203.0.113.1
Forwarded: for="203.0.113.1:12345"

4. 用户代理和地理位置相关

X-Forwarded-Host: example.com
X-Forwarded-Proto: https
X-Forwarded-Port: 443
X-Original-IP: 203.0.113.1
X-Client-IP-Address: 203.0.113.1

伪造示例

import requests

headers = {
    'X-Forwarded-For': '8.8.8.8',
    'X-Real-IP': '8.8.8.8',
    'X-Client-IP': '8.8.8.8',
    'CF-Connecting-IP': '8.8.8.8',
    'True-Client-IP': '8.8.8.8',
    'X-Remote-IP': '8.8.8.8',
    'Client-IP': '8.8.8.8',
    'User-Agent': 'Mozilla/5.0...'
}

response = requests.get('http://target-site.com', headers=headers)

服务端获取真实IP的优先级

通常服务端会按以下优先级获取客户端IP:

function getRealIP() {
    $headers = [
        'HTTP_CF_CONNECTING_IP',     // Cloudflare
        'HTTP_CLIENT_IP',
        'HTTP_X_FORWARDED_FOR',
        'HTTP_X_FORWARDED',
        'HTTP_X_CLUSTER_CLIENT_IP',
        'HTTP_FORWARDED_FOR',
        'HTTP_FORWARDED',
        'REMOTE_ADDR'
    ];
    
    foreach ($headers as $header) {
        if (!empty($_SERVER[$header])) {
            return $_SERVER[$header];
        }
    }
    return $_SERVER['REMOTE_ADDR'];
}

防护建议

对于开发者:

  1. 验证IP来源:只信任可信代理的IP头部
  2. 多重验证:结合多个头部进行交叉验证
  3. 白名单机制:维护可信代理服务器列表
  4. 记录原始IP:始终保留REMOTE_ADDR作为备份

对于安全防护:

# Nginx配置示例
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
real_ip_recursive on;

⚠️ 重要提醒

这些技术信息仅供学习和合法的安全测试使用,请注意:

  • 合法性:仅在授权环境下进行测试
  • 目的性:用于改善自身系统安全防护
  • 责任感:不要用于恶意攻击或违法行为
  • 防护意识:了解这些手段有助于建立更好的防护机制

通过了解这些伪造方式,开发者可以更好地设计防护策略,确保应用程序的安全性。

 

HTTP请求头中IP相关字段详解

1. 代理和负载均衡相关头部

X-Forwarded-For

X-Forwarded-For: client_ip, proxy1_ip, proxy2_ip

含义:记录请求经过的所有代理服务器和原始客户端IP 设置者:代理服务器、负载均衡器 格式:从左到右依次为:原始客户端IP → 第一个代理IP → 第二个代理IP... 备注:最常用的头部,但容易被伪造;真实环境中可能包含多个IP地址

X-Real-IP

X-Real-IP: 192.168.1.100

含义:记录真实的客户端IP地址 设置者:反向代理服务器(如Nginx) 格式:单个IP地址 备注:通常由第一层代理设置,比X-Forwarded-For更简洁但信息量较少

X-Client-IP

X-Client-IP: 10.0.0.50

含义:标识客户端的IP地址 设置者:代理服务器或负载均衡器 格式:单个IP地址 备注:非标准头部,不同厂商可能有不同实现

X-Forwarded

X-Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43

含义:RFC 7239标准化的转发信息 设置者:符合RFC标准的代理服务器 格式:键值对形式,包含IP、协议、代理信息 备注:比X-Forwarded-For更规范,但使用率较低

X-Cluster-Client-IP

X-Cluster-Client-IP: 172.16.0.10

含义:集群环境中的客户端IP 设置者:集群管理系统或负载均衡器 格式:单个IP地址 备注:主要用于Kubernetes等容器集群环境

2. CDN服务商特定头部

CF-Connecting-IP (Cloudflare)

CF-Connecting-IP: 198.51.100.1

含义:Cloudflare CDN识别的真实客户端IP 设置者:Cloudflare边缘服务器 格式:单个IP地址 备注:Cloudflare专用,通常比其他头部更可靠(在使用CF时)

CF-IPCountry (Cloudflare)

CF-IPCountry: US

含义:客户端IP对应的国家代码 设置者:Cloudflare边缘服务器 格式:ISO 3166-1 alpha-2国家代码 备注:基于IP地理位置数据库,用于地域限制和分析

CloudFront-Viewer-Address (AWS)

CloudFront-Viewer-Address: 192.0.2.1:54321

含义:AWS CloudFront记录的访问者地址 设置者:AWS CloudFront边缘节点 格式:IP:端口号 备注:包含端口信息,AWS CloudFront专用

X-Appengine-Remote-Addr (Google Cloud)

X-Appengine-Remote-Addr: 203.0.113.1

含义:Google App Engine记录的远程地址 设置者:Google App Engine前端 格式:单个IP地址 备注:Google Cloud Platform专用头部

3. 其他常见头部

Client-IP

Client-IP: 10.1.1.1

含义:客户端IP地址的通用标识 设置者:各种代理服务器或应用网关 格式:单个IP地址 备注:非标准头部,不同系统实现可能不同

True-Client-IP

True-Client-IP: 192.168.100.1

含义:声称的"真实"客户端IP 设置者:某些CDN或代理服务 格式:单个IP地址 备注:名称具有误导性,同样可以被伪造

X-Original-Forwarded-For

X-Original-Forwarded-For: 172.16.0.1, 10.0.0.1

含义:保存原始的X-Forwarded-For值 设置者:多层代理环境中的中间代理 格式:逗号分隔的IP列表 备注:在复杂代理链中保持原始转发信息

X-Remote-IP / X-Remote-Addr

X-Remote-IP: 203.0.113.50
X-Remote-Addr: 203.0.113.50

含义:远程客户端IP地址 设置者:反向代理或应用服务器 格式:单个IP地址 备注:功能类似,只是命名不同

Forwarded (RFC 7239标准)

Forwarded: for="[2001:db8:cafe::17]:4711", for=192.0.2.60;proto=http;by=203.0.113.43

含义:标准化的请求转发信息 设置者:支持RFC 7239的代理服务器 格式:结构化的键值对,支持IPv6 备注:最新的标准化头部,但普及率还不高

4. 协议和主机相关

X-Forwarded-Host

X-Forwarded-Host: www.example.com

含义:原始请求的Host头部值 设置者:反向代理服务器 格式:域名或IP:端口 备注:用于重建原始请求URL

X-Forwarded-Proto

X-Forwarded-Proto: https

含义:原始请求使用的协议 设置者:反向代理服务器 格式:http 或 https 备注:SSL终结场景中保留原始协议信息

X-Forwarded-Port

X-Forwarded-Port: 443

含义:原始请求的端口号 设置者:反向代理服务器 格式:端口号 备注:配合X-Forwarded-Proto使用

⚠️ 安全注意事项

头部类型 可信度 伪造难度 使用建议
REMOTE_ADDR 很难 始终作为最后防线
CDN专用头部 中高 中等 在对应CDN环境下可信
标准代理头部 容易 需要验证代理来源
自定义头部 很容易 仅作参考,不可单独依赖

关键提醒:所有HTTP头部都可以被客户端伪造,真正可信的只有服务器直接获取的连接IP(REMOTE_ADDR)。在设计安全策略时,应该综合多个因素进行判断,而不是单纯依赖HTTP头部。

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言