不就是个短信登录API嘛,有这么复杂吗?(3)

“其实也有,就看公司舍不舍得花这笔钱了。”老罗接着说:“登录界面可以动态决定是否要求输入图形验证码,对于正常用户可以让他们无需输入图形验证码,对于黑客或者疑似黑客的人,就要求他们输入。”

“这听上去很好啊,另外,这和舍不舍得花钱有什么关系?”Jenny不太明白。

“要动态决定是否要求输入图形验证码这件事儿,其实就是判断当前用我们App的人是真实的顾客还是黑客。我们自己没这个判断能力,不过有提供这种服务的第三方API,只是他们都不是免费的,得花钱买。”老罗向Jenny解释到。

阿某云和腾某云等等都提供这类服务,其主要原理是,服务器在处理登录请求的时候,先尽可能多的收集该请求的上下文信息,例如登录请求的来源IP地址,时间,手机号,User-Agent等等数据,并且把这些数据传递给第三方API,由他们进行一次分析判断,并把结果返回给服务器,告诉服务器当前请求者是可信用户还是可疑用户。最终是否允许登录成功的决定权还是在服务器这边,只是借助了第三方API提供的分析结果来做判断而已。

不就是个短信登录API嘛,有这么复杂吗?

“我不懂技术,不过好像也听懂了的样子。”Jenny笑着说道。

“用第三方API做登录判断这事儿我拍不了板,得找领导批准,说不定还得走采购流程。”但老罗觉得这条路的方向是对的。

“走,我们去问问领导的意见,我实在受不了现在这个图形验证码。”Jenny拉着老罗径直朝着总经理办公室走去。

尾声

最终,老罗他们团队用上了某云的第三方API做登录防护,去掉了令Jenny抓狂的图形验证码。经过和业务部门的商量,验证码有效期最后缩短到了2分钟。

在这期间还出现了两个小插曲。运维部门的同事偶然间发现,应用程序日志文件里居然保存了所有用户的短信验证码,这是小李当初做调试的时候加上去的,后来忘记关掉了。好在并没有造成泄露,后来团队修复了这个问题。

另一个小插曲是,团队做了微服务架构改造,把发送短信的功能拆分出来做成了一个独立微服务,但却没有给这个新的接口设置好访问控制权限,以至于任何人在无需登录的情况下,只要向这个接口发起请求就能成功发送一条短信给任意手机,短信内容还可以自定义。这个问题在安全团队做渗透测试的时候发现的,吓得老罗浑身冒冷汗。所幸发现及时,做了紧急修复,并没有造成安全事故。

薇薇后来把短信登录的故事卡作为案例保存了起来,把安全验收标准又重新做了一次梳理,所以最终的故事卡是这样的:

故事卡-274

作为用户,我可以通过手机号和短信验证码登录,以便于我更方便的登录。

安全验收标准:

短信验证码有效期2分钟

验证码为6位纯数字

每个手机号60秒内只能发送一次短信验证码,且这一规则的校验必须在服务器端执行

同一个手机号在同一时间内可以有多个有效的短信验证码

保存于服务器端的验证码,至多可被使用3次(无论和请求中的验证码是否匹配),随后立即作废,以防止暴力攻击

短信验证码不可直接记录到日志文件

发送短信验证码之前,先验证图形验证码是否正确(可选)

集成第三方API做登录保护(可选)

没成想,一个短信登录API背后,还能牵扯出这么多事儿来。

文/ThoughtWorks马伟

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/91f135922a22becd53d116f9054084da.html