【网络安全】X-Forwarded-For漏洞成因及防范

获取客户端IP背景

分布式拒绝服务攻击(DDoS)和频繁请求的爬虫行为属于异常请求,通过分析 IP 地址可以检测出这些异常行为。

同时,在 Web 应用开发中,获取客户端 IP 地址也是常见的需求。例如,在投票系统中,为了防止刷票,需要限制每个 IP 地址只能投票一次,这就涉及到获取客户端真实 IP 的问题。

如何获取客户端 IP

在 Java 中,获取客户端 IP 最直接的方式是使用 request.getRemoteAddr()。该方法在没有代理的情况下,可以直接获取连接服务器的客户端 IP。但是如今的 Web 应用通常不会直接将应用服务器对外开放,一般会有 Nginx 作为反向代理和负载均衡,有的甚至有多层代理。在这种情况下,直接使用 request.getRemoteAddr() 获取的 IP 地址会是代理服务器的 IP,而非真实客户端的 IP。

原因是:HTTP 协议基于 TCP 协议,request.getRemoteAddr() 默认获取的是 TCP 层直接连接的 IP,对于应用服务器来说,直接连接的是代理服务器(如 Nginx)。

为了获取真实客户端 IP,很多代理服务器会在 HTTP 头中添加 X-Forwarded-For,用来记录请求的来源路径。其格式如下:

X-Forwarded-For: client1, proxy1, proxy2

X-Forwarded-For</

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值