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


“这听上去很好啊,另外,这和舍不舍得花钱有什么关系?”Jenny不太明白 。
“要动态决定是否要求输入图形验证码这件事儿,其实就是判断当前用我们App的人是真实的顾客还是黑客 。我们自己没这个判断能力,不过有提供这种服务的第三方API,只是他们都不是免费的,得花钱买 。”老罗向Jenny解释到 。
阿某云和腾某云等等都提供这类服务,其主要原理是,服务器在处理登录请求的时候,先尽可能多的收集该请求的上下文信息,例如登录请求的来源IP地址,时间,手机号,User-Agent等等数据,并且把这些数据传递给第三方API,由他们进行一次分析判断,并把结果返回给服务器,告诉服务器当前请求者是可信用户还是可疑用户 。最终是否允许登录成功的决定权还是在服务器这边,只是借助了第三方API提供的分析结果来做判断而已 。

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

文章插图
 
“我不懂技术,不过好像也听懂了的样子 。”Jenny笑着说道 。
“用第三方API做登录判断这事儿我拍不了板,得找领导批准,说不定还得走采购流程 。”但老罗觉得这条路的方向是对的 。
“走,我们去问问领导的意见,我实在受不了现在这个图形验证码 。”Jenny拉着老罗径直朝着总经理办公室走去 。
尾声最终,老罗他们团队用上了某云的第三方API做登录防护,去掉了令Jenny抓狂的图形验证码 。经过和业务部门的商量,验证码有效期最后缩短到了2分钟 。
【不就是个短信登录API嘛,有这么复杂吗?】在这期间还出现了两个小插曲 。运维部门的同事偶然间发现,应用程序日志文件里居然保存了所有用户的短信验证码,这是小李当初做调试的时候加上去的,后来忘记关掉了 。好在并没有造成泄露,后来团队修复了这个问题 。
另一个小插曲是,团队做了微服务架构改造,把发送短信的功能拆分出来做成了一个独立微服务,但却没有给这个新的接口设置好访问控制权限,以至于任何人在无需登录的情况下,只要向这个接口发起请求就能成功发送一条短信给任意手机,短信内容还可以自定义 。这个问题在安全团队做渗透测试的时候发现的,吓得老罗浑身冒冷汗 。所幸发现及时,做了紧急修复,并没有造成安全事故 。
薇薇后来把短信登录的故事卡作为案例保存了起来,把安全验收标准又重新做了一次梳理,所以最终的故事卡是这样的:
故事卡-274
作为用户,我可以通过手机号和短信验证码登录,以便于我更方便的登录 。
安全验收标准:
短信验证码有效期2分钟
验证码为6位纯数字
每个手机号60秒内只能发送一次短信验证码,且这一规则的校验必须在服务器端执行
同一个手机号在同一时间内可以有多个有效的短信验证码
保存于服务器端的验证码,至多可被使用3次(无论和请求中的验证码是否匹配),随后立即作废,以防止暴力攻击
短信验证码不可直接记录到日志文件
发送短信验证码之前,先验证图形验证码是否正确(可选)
集成第三方API做登录保护(可选)
没成想,一个短信登录API背后,还能牵扯出这么多事儿来 。


推荐阅读