解决:伪造X-Forwarded-For

目前很多Web 应用(例如获取用户所在地区,基于 IP 做访问频率控制,禁止某些IP访问等等),为了获取用户真正的 IP,从 HTTP 请求头中获取 IP地址。这些情况下,必须确保获取到的IP地址是真实可靠的。
经过前面的分析和测试,
1.对于直接使用的 Web 应用,必须使用从TCP连接中得到的 Remote Address,才是用户真实的IP;
2.对于使用 nginx 反向代理服务器的Web应用,nginx必须使用Remote Address正确配置set Headers,后端服务器则使用nginx传过来的相应IP地址作为用户真实IP;同时,后端服务器应使用X-Real-IP 或 X-Forwarded-For最后1段IP作为限制,允许自己的nginx服务器访问,禁止其它IP访问,禁止对外提供服务。

上面这解决原理很容易百度到,然后下面是实操;

第一点的解决办法就不用说了,重点说下第二点;

nginx 代理配置加段话 proxy_set_header X-Real-IP $remote_addr;

java获取就String ipAddress = request.getHeader("X-Real-IP");

proxy_set_header X-Real-IP $remote_addr;这个是表示在请求头新增参数X-Real-IP,并且把请求的客户端ip放进去;这里需要注意的是如果有经过多层Nginx代理,例如:

Nginx1->nginx2 ->各个服务;nginx2有配置X-Real-IP,这样的话服务里获取到的X-Real-IP是Nginx1所在的那个服务的ip地址来的,所以正确的是第一层的nginx加上proxy_set_header X-Real-IP $remote_addr; 而后面的nginx就不要加这配置了;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值