前后端数据对接防止接口被恶意调用

最近做了个不大点的微信活动,上线之后,出现了无穷尽的微信刷子,这些刷子的openid都不一样,昵称也格式相似,通过记录IP发现,IP都是相同的,一个IP有上千个微信用户,我很是费解,不知道现在是不是有什么黑科技可以伪造这点了;我先说下我的流程

1,用户授权,session记录用户openid

2,用户参加活动,完成活动一系列指定操作,完成活动,将用户信息录入数据库

3,用户完成活动,分享朋友圈,朋友圈朋友进入授权session记openid,,帮用户完成指定操作

4,朋友完成操作后,用户可抽奖

大体一看,没什么漏洞,上线之后,被刷子们刷懵逼了

前端与后台总给有两个个接口的交互:

1,用户完成一系列活动操作后请求后台,后台录入数据,暂且叫做接口一

2,朋友圈朋友完成操作接口,暂且叫做接口二

3,用户本身抽奖,暂且叫做接口三

下面说下刷子走的流程:

1,刷子要么是黑科技要么是真有很多个微信号,通过微信授权接口来到活动首页,满足session存储openid的要求,只一次就够了!!

2,刷子授权之后直接走接口一,可以快速的将自身信息录入我的数据库,直接跨过前端活动的一系列操作

3,刷子的好友授权之后直接走接口二,完成朋友操作;

4,刷子抽奖

我的解决办法:

1,接口一 增加IP次数的调用限制 增加单用户调用接口限制(适中 既能满足普通用户需求也要让刷子难受)

2,接口一 增加接口调用频率限制(同一用户在一定次数内每隔10秒可以调用一次,超过一定次数,间隔时间翻倍)

3,最主要的,刷子为什么可以直接调用接口,因为服务端并没有记录用户的活动轨迹,我们需要做的是:用户必须按照指定的操作顺序才可以调用接口一,少一步或跳步都不行;我的解决方案是:直接在服务端记录,不让前端通知,这就需要把活动系列操作分开来走,用户授权进入记录值1 用户完成A操作记录2 依次类推,这样刷子即使发现这个逻辑,他也必须一步一步的访问,增加她的时间代价

4,朋友圈进入的用户 也需要增加记录,必须记录进入首页  完成操作X,才允许完成最终操作;同时增加可完成的操作间隔,禁止无限制的操作

以上就是我的解决方案,但其实还是有漏洞,刷子还是可以继续刷,但是这样刷子要深究我的判断机制,最后判断出机制,开始刷的时候,所花费的时间,操作的复杂度,也不会比正式用户少多少;


最最让我懊恼的是,我数据记录的openid 微信昵称,都是不一样的,但是来源IP是相同的,没做这些防刷机制之前,单个IP都是上千条数据 ,可见这就是刷子的操作,不理解,难道刷子真有这么多的微信号嘛?还是说刷子有黑科技,可以伪造微信用户???!!求解

你可能感兴趣的:(PHP)