引言
之前介绍过一种名为CSRF的网络攻击方式,本次将介绍另一种网络攻击方式——XFF。XFF注入攻击是一种Web应用程序安全漏洞,它利用了HTTP请求中的X-Forwarded-For标头字段来欺骗应用程序以绕过IP过滤或身份验证控制。这种攻击通常发生在代理服务器或负载均衡器后面的Web应用程序中。
今天,就让我们一同揭开 XFF 攻击的神秘面纱,深入了解它,以便更好地守护我们的网络家园安全。
01
XFF 攻击是什么?
XFF,即 “X – Forwarded – For”,原本是一个 HTTP 头字段,设计初衷是让代理服务器能够将客户端的真实 IP 地址传递给后端服务器。在正常的网络架构中,当客户端通过代理服务器访问网站时,代理服务器会在请求头中添加 X – Forwarded – For 字段,并将客户端的 IP 地址填入其中,这样后端服务器就能知道真正发起请求的客户端是谁。
然而,恶意攻击者却利用了这一机制。他们通过伪造 X – Forwarded – For 头信息,将其中的 IP 地址篡改为虚假的、甚至是恶意的地址,从而欺骗后端服务器。后端服务器如果没有对这个字段进行严格的验证和处理,就可能会根据伪造的 IP 地址做出错误的判断,比如给予非法访问权限、记录错误的用户行为等,进而导致安全漏洞。
02
XFF格式
XFF的格式通常为:
X-Forwarded-For: <client>,<proxy1>,<proxy2>,...
XFF的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。
例如,以下是一个 X-Forwarded-For 头部字段的示例:
X-Forwarded-For: 203.0.xxx.195 , 70.xxxx.3.18 , 150.xxxx.238
其中,客户端 IP 地址为 203.0.xxx.195,该请求经过了两个代理服务器,IP 地址分别为 70.xxxx.3.18 和 150.xxxx.238。
03
XFF伪造原理
如果客户端在发起请求时,请求头上带上一个伪造的X-Forwarded-For,由于后续每层代理只会追加而不会覆盖,那么最终到达应用服务器时,获取的左边第一个IP地址将会是客户端伪造的IP。利用Java代码中getClientIp()方法获取的IP地址很有可能是伪造的IP地址。
伪造X-Forwarded-For头的方法很简单,例如Postman就可以轻松做到:
曾经有一家知名的在线银行,其系统依赖 X – Forwarded – For 头信息来识别用户的来源 IP,以便进行访问控制和风险评估。一天,黑客发动了 XFF 攻击,他们伪造了 X – Forwarded – For 头,将其 IP 地址伪装成银行内部的信任 IP。
由于银行系统对这个头信息的验证机制不够完善,未能识别出这是伪造的请求,黑客成功绕过了部分安全防护措施,获取了一些客户的账户信息。虽然银行及时发现并采取了措施,但这次攻击还是给部分客户带来了恐慌,也让银行在声誉和经济上遭受了一定的损失。
04
防范 XFF 攻击
面对 XFF 攻击的威胁,我们并非束手无策。以下是一些有效的防范措施:
01
严格验证 XFF 头信息
后端服务器不应盲目信任 X – Forwarded – For 头中的 IP 地址。可以通过配置服务器,只信任来自可信代理服务器的 XFF 头。
例如,在 Nginx 服务器中,可以设置一个允许的代理 IP 列表,只有来自这些 IP 的 XFF 头才会被接受。
02
结合其他信息验证
不要仅依赖 X – Forwarded – For 头来确定用户身份或来源。可以结合用户的登录凭证、设备指纹等其他信息进行综合验证。
03
使用安全中间件
引入专业的安全中间件,如 Web 应用防火墙(WAF)。WAF 可以对 HTTP 请求进行深度检测,识别并拦截包含伪造 XFF 头的恶意请求。
总结来说,X-Forwarded-For 注入漏洞是一种常见的安全问题,通过采取有效的安全措施,可以降低漏洞被利用的风险,确保 Web 应用的安全性。
✦✦
由于微信公众号修改了推送规则,
没有加“星标★”的订阅号,
收到的推送只有标题和小图,
而且会慢慢收不到最新的推送。
想要不错过各类讯息,
小伙伴们可以将【乐科科集团】公众号
加个星标❤
你 “在看” 我吗?