X-Forwarded-For绕过服务器IP地址过滤

本文探讨了在HTTP通信中通过伪造X-Forwarded-For头来实现IP地址欺骗的技术细节及其应用场景。详细解释了X-Forwarded-For的作用原理、格式及如何利用该字段绕过服务器的IP地址过滤机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:
http://www.jianshu.com/p/98c08956183d
https://github.com/bl4de/ctf/blob/master/2017/nullcon_HackIM_2017/Web1.md

看到一个CTF题中有一个与X-Forwarded-For有关的。
通过在HTTP头中设置

X-Forwarded-For: 127.0.0.1

在正常的TCP 通信中,是可以伪造数据包来源 IP 的,但这会让发送出去的数据包返回到伪造的IP上,无法实现正常的通信。

实现TCP层级别的伪造很难,因为很难实现正常的TCP连接;但是在应用层协议HTTP上的实现较容易,通过伪造IP,能欺骗多数服务器应用程序实现通信。对于绕过服务器的IP地址过滤或者伪造来源IP特别有用,导致的后果就是非授权IP能访问服务器,甚至能钻服务器的漏洞。

关于X-Forwarded-For

HTTP 连接基于 TCP 连接,HTTP 协议中没有 IP 的概念,只能通过X-Forwarded-For来实现。
X-Forwarded-For位于HTTP协议的请求头, 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP。如今它已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入RFC 7239(Forwarded HTTP Extension)标准之中。
其格式为:

X-Forwarded-For: client, proxy1, proxy2

最开始的是离服务端最远的设备 IP(即客户端IP),然后是每一级代理设备的 IP。

总结

目前很多Web 应用(例如获取用户所在地区,基于 IP 做访问频率控制,禁止某些IP访问等等),为了获取用户真正的 IP,从 HTTP 请求头中获取 IP地址。
对于直接使用的 Web 应用,必须使用从TCP连接中得到的 Remote Address,才是用户真实的IP

X-Forwarded-For漏洞是一种HTTP部注入攻击,攻击者可以通过修改HTTP请求中的X-Forwarded-For部来伪造用户的IP地址,从而绕过IP地址限制等安全措施。修复该漏洞需要在代码中对X-Forwarded-For部进行过滤和验证。 以下是一些PHP代码示例,可以用于修复X-Forwarded-For漏洞: 1. 使用正则表达式过滤X-Forwarded-For部: ```php $xff = $_SERVER['HTTP_X_FORWARDED_FOR']; if(preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $xff)) { // X-Forwarded-For部格式正确,可以使用该IP地址 } else { // X-Forwarded-For部格式不正确,可能是攻击者伪造的IP地址,需要进行处理或拒绝该请求 } ``` 2. 只接受已知的代理服务器IP地址: ```php $xff = $_SERVER['HTTP_X_FORWARDED_FOR']; $proxy_ips = array('192.168.1.1', '192.168.1.2'); // 已知的代理服务器IP地址 if(in_array($xff, $proxy_ips)) { // X-Forwarded-For部来自已知的代理服务器,可以使用该IP地址 } else { // X-Forwarded-For部来自未知的代理服务器或攻击者,需要进行处理或拒绝该请求 } ``` 3. 使用PHP框架中的内置函数过滤X-Forwarded-For部: 如果你使用的是PHP框架,例如Laravel、Symfony、Yii等,可以使用框架中的内置函数来过滤X-Forwarded-For部。以下是Laravel框架中的示例代码: ```php $ip = request()->ip(); ``` 该代码中,`request()->ip()`函数会自动检测并过滤X-Forwarded-For部,返回正确的客户端IP地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值