1. 接手了一个注册验证的一个坑。
起因:一个小时内同一个手机号突然发送了8000多条短信。
原因:测试代码发现确实可以无限发送短信,是因为后台没有限制同一个手机号发送次数的限制。
解决方案:联系短信提供商,限制同一个手机号发送次数,并且在后台添加同一个手机号发送的限制
操作:首先在数据库里的记录发送短信的表里增加一个字段用来记录同一个手机号发送的条数。
发送短信前,首先查看有没有短信发送记录,如果没有,就直接创建一条记录,并且记录发送的次数为1次
如果有发送过的记录,查看最近的一次发送短信的时间距离现在有没有1天
有:更新发送短信的时间,并且重置发送次数为1次
没有:更新发送短信的时间,并且发送次数+1
2. 另外测试的时候还有个发现
起因:如果发送短信验证后,会有一个60秒的下次短信发送倒计时,但是如果用户在倒计时的时间内刷新页面,那么就又可以再次发送短信
解决方案:发送短信的时候,如果是刚发的短信,直接返回距离下次发送的时间,不进行重新发送短信
操作:发送短信前,如果有记录就查看下,这条记录距离现在是否大于60秒
大于:可以发送,并且返回一个距离下次发送还有60秒的时间
小于:查看下距离下次发送还有多长时间,并且这个时间到前端
这样在点击发送完短信的这段时间内,就算刷新页面,时间不够60秒也不会重新发送短信
3. 然后查看短信发送接口发现了另外一个问题
起因:点击发送短信后,会弹出一个验证码,而这个验证码是第三方的拖动滑块验证。所以在验证码验证成功以后,会调一个回调函数,而这个回调函数就是请求的短信接口。
但是这个短信发送的并没有二次验证这个验证码是否正确就进行了短信发送。这样导致了可以使用这个回调函数进行发送短信,不需要经过验证码
解决方案:把验证验证码和短信发送合并为一个请求。如果是使用第三方的就需要进行验证码二次校验。
操作(使用第三方验证码):在验证码验证成功以后,根据第三方返回的参数,一并传给短信发送的接口,短信发送接口在发送短信前,根据第三方提供的函数进行二次校验。
如果成功,可以发送短信。失败则表示验证不成功。
在做注册的时候,一定要加验证码,防止一些奇怪的人进行刷短信或者邮箱接口。
在发送短信前,可以在后台设置再次发送短信的间隔时间,防止用户一直不断的点击发送短信。
如果可以的话,一定要在发送短信前,先验证验证码,这样,可以阻止一些人进行刷发送短信的接口。
如果使用的第三方验证码的话,一定要做好二次验证的功能。
确认提交后一定要判断发送的手机号和短信的验证码是否一致。