APP里有一个功能是用户上传图片以后,让其他人来投票,最后得票最多的可以得到某种奖励。最近发现了几次刷票的情况,本文总结一下处理的方法
投票无需登录
基本的规则是投票无需登录,因为如果需要登录了才能投票的话,会影响活动的传播效率。所以规则设置为任何人都可以投票,这就给拉票行为留下了隐患
相反,如果限制登录才能投的话,刷票就很困难了,服务端可以很容易地控制刷票行为
在服务端控制的方案
所以既然不能用account_id这个天然的唯一标识,就需要找到另一个可以唯一标识终端的标记
在app里可以用IDFA或者device_id作为唯一标识。同时我们也提供了web版的拉票页面,可以考虑用cookie来作为唯一标识,虽然不太稳定,也可以基本上达到目的
在客户端控制的方案
另一种方案是在客户端做控制,每次客户端投票以后,都把投过的票的id记下来,然后屏蔽掉重复操作
在app里可以用文件保存住,web里也可以用local storage实现。全过程不需要服务端参与,是一个比较理想的方案
缺点是local storage有一定的兼容性问题,在比较老的android手机上会有问题。另外如果服务端的接口完全不做保护的话,作弊的人可以通过直接调接口的方式,绕过客户端逻辑实现刷票
给服务端接口增加保护
通过上述的方法,基本上可以保证通过客户端正常操作的用户无法刷票,但是无法应对直接调用接口的场景,所以还需要对接口本身进行保护
有一种方法是给接口增加2个参数,random和keyÿ