常用的IP相关请求头

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是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'];
}
防护建议
对于开发者:
- 验证IP来源:只信任可信代理的IP头部
- 多重验证:结合多个头部进行交叉验证
- 白名单机制:维护可信代理服务器列表
- 记录原始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头部。
布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏