我们的在注册各大网站或者APP的时候,经常会遇到填写验证码的情况。验证码的设置是平台为了验证用户身份而专门设置的安全机制。那么,问题来了:短信验证码在网络上的工作流程是怎样的呢?
短信验证码内部工作流程
1.使用random函数随机生成一个验证码,位数可以自己定(一般是4位、6位验证码)
2.调用短信运营商的接口,并向其发送手机号和验证码数据。
3.短信运营平台初步审核将信息发送给三大运营商的某一家。
5.网站或app保存接口返回的信息
6.服务器端会将这些信息保存在会话控制器Session中,作为后期的验证使用。
7.网站/APP接收用户填写的验证码信息
============================================================================================================================
===============================================================================================
现在市面上有多种验证码类型,例如图形验证码、滑动验证码、语音验证码、智力答题验证码等类型,短信验证码因其操作性简单,时效性强,安全性高,成本低等优点,短信验证码几乎成为了所有移动产品的标配。因此对短信验证码的机制进行分析,通过了解不同的短信验证码机制,我们可以更好地针对其来设计测试用例以及测试重点。现将目前市面上app的短信验证码机制做以下总结。
内容包含以下三个部分:
测试短信验证码的侧重点
总结
验证码获取机制
a.不同业务场景的短信验证码
对于不同的业务场景,虽然发送短信验证码的接口是同一个,但是会区别不同的短信验证码发起类型而进行发送。常见的场景类似于注册、忘记密码、支付等,特别是涉及到用户个人敏感信息和资金时,为了确认用户本人操作时,通常会使用短信验证码进行二次认证。
b.前后端校验:提交Token参数校验
前端(客户端)在请求发送短信的时候,同时向服务端提交一个Token参数,请求中不会将手机号等明文参数直接传给服务端。服务端对这个Token参数进行校验,校验通过之后,再向请求发送短信的接口向用户手机发送短信。流程图如下:
从发送验证码开始,前端(客户端)会进行一个60秒的倒数,在这一分钟之内,在该页面,用户是无法提交多次发送信息的请求的。即使退出页面,重新再进入点击获取,会提示获取验证码频繁。
b.次数限制-连续获取,但不校验
对使用同一个手机号在进行某些场景需要发送短信验证码操作时,连续获取验证码但不校验,系统可以对该手机号进行限制。达到设定次数提示超过上限,无法获取。但只能避免人工手动刷短信,对于批量使用不同手机号码来刷短信的机器无法进行限制。
c.次数限制-连续获取,同时校验
对使用同一个手机号在一天内获取验证码,有个最大值的限制。
验证码错误机制
验证码超时机制
验证码校验机制
目前短信验证码的校验分两部分,前端通常会先校验验证码的格式,位数等信息,服务端会对前端发送的内容进行校验。避免将短信验证码暴露在返回中,验证码只存在服务端中并不能通过任何api直接获取。
短信验证码有些功能点由于测试环境无法测试,需要在生产环境着重验证的功能点;或者是其功能点在生产环境验证成本过高,可以放在测试环境先行验证。
短信验证码模板
由于测试环境不会真实发送短信到手机上,所以需要在生产环境上对短信的发送和短信模板进行测试。
短信验证码校验开关
短信验证码场景
短信验证码在整个app中有不同的应用场景,需要对每个场景的短信验证码的校验进行测试,尤其涉及动帐类等场景。
全面地了解验证码的机制,可以更好的帮助我们设计测试用例,抓住在测试环境及生产环境的侧重点,针对性地对短信验证码进行测试,避免不法分子利用短信接口的漏洞进行恶意攻击,给公司造成大量的金钱损失。