0
点赞
收藏
分享

微信扫一扫

解决:伪造X-Forwarded-For

写心之所想 2022-03-11 阅读 81

目前很多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 条评论