收取短信验证码测试攻略?

现在的APP,很多都需要登录注册,而注册一般要验证手机号码,就会发短信验证码,类似一个下面功能,我们会怎么考虑进行测试?

收取短信验证码测试攻略?

首先确定页面有哪些元素,并且明确功能、测试点等,点击手机号获取验证码是用来做什么的。首先明确和细化需求,(明确功能)验证码是手机下发的验证码,还是图片验证码等。

在明确功能后先冒烟测试或通过性测试,测试功能正常使用后,再进行非通过性(异常)测试。

1、先进行通过性测试

输入正确的手机号码,点击获取验证码,查看手机是否收到短信。

收到短信后输入验证码:若为登录功能,还应检查是否进行页面跳转,是否正确进行登录,是否可操作登录后应操作的项;若功能为注册,则应查看是否注册成功,去数据库检查数据的正确性。
通常手机号验证的规则为: /^1d{10}$/,以1开始后面的10位正则,覆盖移动、联通、电信。当然,做的更好的校验还有号段检查,比如120xxx手机号就是非法的。

2、为空测试
①不输入手机号,不输入验证码 直接点击登录或注册等功能点 ,提示不能为空;
②不输入手机号,只输入验证码 直接点击登录或注册等功能点 ,提示不能为空; 
③输入手机号码,不输入验证码 直接点击登录或注册等功能点  ,提示不能为空;

3、输错手机号码错误测试
①输入汉字、小数,字符串,空格及组合在手机号码文本框中,提示手机号码不正确;
②输入10位,12位数字进行登录,提示手机号码不正确,提示手机号码不正确;
③输入11位非手机号码(号段校验)进行获取验证码,提示手机号码不正确;

4、验证码
①输入错误的验证码(多输、少输,不输以及非收到的正确验证码),提示请输入正确的验证码;
②明确验证码的失效时长后,在时长之后输入输入码,提示该验证码已失效,请重新获取验证码;
③倒计时60s内,不能再次点击获取验证码;
④倒计时开始时,进行下一步操作时,返回后,倒计时应该还是接着倒计时。如操作时50s,经过4s后返回,应该是46s。

5、常见漏洞
①无效验证:有验证码模块,但验证模块与业务功能没有关联性,此为无效验证,一般在新上线的系统中比较常见。
 
情况一,获取短信验证码后,随意输入验证码,直接输入两次密码,可成功更改用户密码,没有对短信验证码进行验证,可能导致CSRF等问题。
情况二,任意用户注册
第一步,利用自己的手机号接收验证码进行验证,下一步跳转到一个设定密码的页面。
第二步,抓包,篡改手机号,使用任意手机号进行注册。
问题剖析:业务一致性存在安全隐患,身份验证与密码修改过程分开,验证无效。

②客户端验证绕过:客户端验证是不安全的,可能导致任意账号注册、登录及重置任意用户密码等一系列问题。

情况一,直接返回明文验证码
点击获取收集验证码,监听到两条json数据,可以发现验证码就藏在ticket里面,输入即可登陆成功。

情况二,返回密文验证码
验证加密后返回客户端,用户解密即可获取验证码。

情况三,拦截替换返回包
第一步,使用正常账号修改密码,获取验证码通过时服务器返回数据,保存该信息;
第二步,使用fiddler下断,之后点击确定,服务器会返回验证码错误之类的信息,使用{"MessageHeader":{"MessageID":"RSP036","ErrorCode":"S000","Description":"成功!"}}此信息进行替换后再执行,密码修改成功。
问题剖析:常见于APP等客户端软件,通过拦截替换返回信息,绕过客户端本地验证。

③短信轰炸

短信轰炸是手机验证码漏洞中最常见的一种漏洞类型。
在测试的过程中,对短信验证码接口进行重放,导致大量发送恶意短信。

情况一,无限制,任意下发

情况二,有一定时间间隔,无限下发
每隔60秒可下发一条短信,无限下发,短信轰炸。在测试过程中,可通过编写Python脚本来计算短信下发时间间隔,实现短信轰炸。

④验证码爆破情况:短信验证码一般由4位或6位数字组成,若服务端未对验证时间、次数进行限制,则存在被爆破的可能。
输入手机号获取验证码,输入任意短信验证码,发起请求,抓包,将短信验证码字段设置成payloads取值范围为000000-999999进行暴力破解,根据返回响应包长度判断是否爆破成功。一般使用的工具burpsuite。

⑤验证码与手机未绑定。

6、如何防止手机验证码被爆破,架构的方面提出要求:如3小时被人刷了千条

①前端app,从界面方面限制请求的次数(60s获取一次),也就是按钮的事件;禁用代理调用接口,增加图形验证码或者附加码正确了再发送措施。

②后台接口:参数做限制,设备id、mac、ip做限制。例如60s内 相同的设备id、mac、ip过滤请求;参数加密;添加https认证,客户端和后台成证书,防止抓包获取接口情况;后台做认证操作:限制在app上获取,协定和app之间认证算法。app传递公钥,后端进行认证筛选等过滤。



留言