前言
现在市面上有多种验证码类型,例如图形验证码、滑动验证码、语音验证码、智力答题验证码等类型,短信验证码因其操作性简单,时效性强,安全性高,成本低等优点,短信验证码几乎成为了所有移动产品的标配。因此对短信验证码的机制进行分析,通过了解不同的短信验证码机制,我们可以更好地针对其来设计测试用例以及测试重点。现将目前市面上app的短信验证码机制做以下总结。内容包含以下三个部分:
- 短信验证码相关机制
- 测试短信验证码的侧重点
- 总结
短信验证码相关机制
-
验证码获取机制
a. 不同业务场景的短信验证码
对于不同的业务场景,虽然发送短信验证码的接口是同一个,但是会区别不同的短信验证码发起类型而进行发送。常见的场景类似于注册、忘记密码、支付等,特别是涉及到用户个人敏感信息和资金时,为了确认用户本人操作时,通常会使用短信验证码进行二次认证。
b. 前后端校验:提交Token参数校验
前端(客户端)在请求发送短信的时候,同时向服务端提交一个Token参数,请求中不会将手机号等明文参数直接传给服务端。服务端对这个Token参数进行校验,校验通过之后,再向请求发送短信的接口向用户手机发送短信。流程图如下:
-
验证码时间&次数机制
以下时间和次数限制可以有效对单用户的短信轰炸和多用户的短信骚扰两种攻击场景进行防御。
a. 获取时间限制
从发送验证码开始,前端(客户端)会进行一个60秒的倒数,在这一分钟之内,在该页面,用户是无法提交多次发送信息的请求的。即使退出页面,重新再进入点击获取,会提示获取验证码频繁。
b. 次数限制-连续获取,但不校验
对使用同一个手机号在进行某些场景需要发送短信验证码操作时,连续获取验证码但不校验,系统可以对该手机号进行限制。达到设定次数提示超过上限,无法获取。但只能避免人工手动刷短信,对于批量使用不同手机号码来刷短信的机器无法进行限制。
c. 次数限制-连续获取,同时校验
对使用同一个手机号在一天内获取验证码,有个最大值的限制。
-
验证码错误机制
对于同一个手机号,如果连续提交错误的验证码,达到一定次数,会导致该手机号锁定一段时间,无法获取,也无法校验。
-
验证码超时机制
每次的短信验证码是有一定的时效性,超过一定的时间,校验时会提示该验证码已失效,需要重新获取。
-
验证码校验机制
目前短信验证码的校验分两部分,前端通常会先校验验证码的格式,位数等信息,服务端会对前端发送的内容进行校验。避免将短信验证码暴露在返回中,验证码只存在服务端中并不能通过任何api直接获取。
测试短信验证码的侧重点
短信验证码有些功能点由于测试环境无法测试,需要在生产环境着重验证的功能点;或者是其功能点在生产环境验证成本过高,可以放在测试环境先行验证。
-
短信验证码模板
由于测试环境不会真实发送短信到手机上,所以需要在生产环境上对短信的发送和短信模板进行测试。
-
短信验证码校验开关
目前在测试环境测试短信验证码时,由于不是真实发送短信验证码到手机号上,所以通常是方便测试,会将其校验关闭,即输入满足位数要求的验证码即可通过,或是输入固定的验证码便可通过。这便要求在生产环境需要着重关注是否有校验短信验证码。
若生产环境没有打开校验,不法分子便可以利用此漏洞使用任意手机号进行注册帐号而从中获利。
-
短信验证码次数&时间
在测试环境可以先对短信验证码次数和时间的阀值进行测试,避免在被恶意短信轰炸时,没有达到防御效果。
-
短信验证码场景
短信验证码在整个app中有不同的应用场景,需要对每个场景的短信验证码的校验进行测试,尤其涉及动帐类等场景。
总结
全面地了解验证码的机制,可以更好的帮助我们设计测试用例,抓住在测试环境及生产环境的侧重点,针对性地对短信验证码进行测试,避免不法分子利用短信接口的漏洞进行恶意攻击,给公司造成大量的金钱损失。
网友评论