浅谈Token令牌验证及防刷

昨天波波在逛V2EX社区时遇到某网友提出了一个问题,其大致意思是网站token加密机制被破解,导致网站被刷单。所以今天波波就简单谈谈Token令牌的验证及如何防止刷单。

随着项目前后端分离的方式被越来越多的公司采用,前后端分离后鉴权与会话保持也成了程序员们日常聊的一个话题。而在鉴权与会话保持方面应用最多的莫过于Token验证。

Token验证的原理图:

Token验证机制

其实严格意义上来讲,一套合理的Token加密与验证机制可以最大程度的保障系统的安全以及用户良好的体验。一般情况下Token的加密方式仅存在于服务器的代码中并不会被任何人轻易破解。比如波波经常用的加密方式为:

Token = MD5加密(自然排序(用户ID+用户注册时6位随机数+登陆时间+ip地址));

用户登陆成功后,将Token保存在以活跃用户分组的Redis中用于后期验证。同时Token需要设定一个过期时间。一般为2小时,过期之前需要用旧的Token来请求新的Token。这样的好处是第三方劫持获取的Token后除非在同一IP下才会验证通过。而且MD5加密虽然简单,但是属于不可逆的,即使你拿着字典破解了字符串的内容也毫无意义。

那么Token为什么会被破解呢?

Token正常情况下是不会被破解的,而且作为资深黑客也完全没有必要去破解这串毫无意义的字符,毕竟很浪费时间。Token被破解无非是三种原因。

①加密机制过于简单。黑客一猜就猜到了,比如md5(用户密码)。

②第三方劫持。这个操作难度比较大,而能够劫持链路数据的黑客通常不屑于破解一个小网站去刷单挣钱。

③服务器配置不当。这个可能性是最大的,以波波的工作经历来看很多网络公司是没有专门的运维人员的。通常服务器的配置使用都由后台开发人员进行管理。服务器配置不当可能会暴露网站目录,同时也可能是被一些爬虫程序抓取了网站的源码。

对于Token的加密与验证波波就先写这么多,其实暴力破解密码看似是100%能破解,只是时间问题。但实际上对方随意增加一个字符破解难度就会成倍增加。比如前几天波波服务器一直被一个郑州的人采用虚拟IP暴力破解。

服务器暴力破解

波波本不想搭理他的,波波的服务器密码长度足够一台普通服务器跑一年的字典。无奈后台太多监控日志。所以只好把服务器密码去掉了。正常来讲Token也是一样,随便一个加密算法就足够对方跑好几年的字典。而往往真正的黑客反而是利用漏洞者较多。

下面波波分享下商城系统如何防止刷单。用户之所以刷单,往往都是利益。理论上讲刷单是无法避免的,比如一个正常的用户张三,正常用官方APP登陆商城后疯狂在某店铺下单。作为平台也好,店铺也好肯定是不能对用户讲“你不要下单了”。而我们需要做的则是思考商城疯狂刷单背后的逻辑。

①用户相关的利益。某些商城会随着用户购买商品赠送一定的折扣、优惠券、代金券等等。一些程序员为了图省事在用户下单后取消订单时,对应的优惠券金额会以现金的形式存放在用户的账户中。用户通过刷单能够得到利益于是疯狂下单。

2016年的时候我们给客户开发了一套消费全返的商城,当时就是这样。而且客户允许平台用户刷单。当时开发完商城后我们立即开发了一套刷单系统。哈哈,当然也是自己刷单赚钱。

②商家故意刷单。有时为了好评,为了上热榜,商家会花钱雇一些做社群的人来刷单。

正常情况下没有一点好处,相信不会有人专门破解你网站刷单的。所以针对这些业务逻辑作为开发人员应该梳理一下,找出问题的根源才能彻底杜绝。

 

波波
你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!