暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【技术】前后端分离后端如何取得真实IP

张二蛋又要扯蛋了 2020-09-14
1727

2020年的第 15 篇原创文章,来自团队内小伙伴



写在前面

 文章来自团队小伙伴在前后端分离的场景下遇到的IP获取的问题及其解决办法。

背景

 企业名录访问量突增触发监控,跟踪与分析后,是黑产高频访问所致。企业名录为了支持SEO同步兼顾PC企业详情页访问,去年在原有基础上实施了前后端分离,目前NodeJS Server与后端WEB服务数据交互中获取的是NodeJS Server 的内网IP,不利于防刷处理。

现状是NodeJS Server端做了比较轻量级的IP防刷策略,后端虽有基于流控、风控等比较灵活实时的防刷策略,但部分策略启用需要透传用户ip、cookie等信息,如何通过最小化改动,取得真实的用户ip是需要解决的问题。

方案要求

  1. 最小化代码改动:一处修改所有获取ip都生效

  2. 满足多种时序:日志中、业务代码、拦截器、流控插件

解决方案

  • 前后端约定规则:(node server获取客户端ip,后端通过约定规则获取)

  • nodejs server配置(取得客户ip,添加realip参数)

  • 后端添加Filter,核心代码如下:

  • 配置Web.XML Filter

 

  • 代码测试:

需要注意地方:

  1. 为什么使用过滤器,由于项目中Controller、拦截器、过滤器,调用顺序不一致,过滤器通过配置可以做到最早调用,一处替换处处生效。

  2. 过滤器不能使用 @WebFilter注解,是因为使用注解的过滤器加载顺序不能保证,据说默认是通过类名排序实现,使用配置可以保证其他过滤器也可以正确取得ip

  3. 因IP是通过参数获取,需要保证请求来自内网环境请求,需自行增加内网判定逻辑。否则可能被利用,绕开IP限制。

filter-mapping ip替换过滤器顺序最靠前

仅修改NodeJS server 配置是否可行?

通过实际中与FE多次尝试,基于目前的Nginx配置透传ip 与IP获取策略,多次调整后X-Real-IP获取都是内网IP

失败原因可从nginx配置可知:(即使是内网只要经过nginx就会被覆写)

 


关于我及张二蛋又要扯蛋了

    一个不务正业的程序猿及这个程序猿写字的地方,这里可能有技术,有理财,有历史,有总结,有生活,偶尔也扯扯蛋,妥妥的杂货铺,喜欢可关注。

    酒已备好,等你来开



文章转载自张二蛋又要扯蛋了,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论