这八个建议来自阿里云,感觉考虑得挺周全的,此前也遇到过短信接口恶意被刷,既要新老版本兼容,又要有效防范,还要不伤用户体验,如果从一开始就设计优良,考虑周全,便不会无故白白多交好几万的短信费了。这八条建议记录于此:
在手机号码窗口增加号码有效性检测,防止恶意攻击者使用无效或非法的号码,从而在第一窗口屏蔽非手机号的乱码等无效数字。
在注册页添加个隐藏的,设置保存在session中的随机验证码,发短信前验证一下,保证发验证码短信请求是在业务页面点击。
即当用户进行“获取动态短信” 操作前,弹出图片验证码,要求用户输入验证码后,服务器端再发送动态短信到用户手机上,该方法可有效缓解短信轰炸问题。
由于当前验证码在攻防对抗中逐步被成功自动化识别破解,我们在选用安全的图形验证码也需要满足一定的防护要求。
采用限制重复发送动态短信的间隔时长, 即当单个用户请求发送一次动态短信之后,服务器端限制只有在一定时长之后(此处一般为60-120秒),才能进行第二次动态短信请求。该功能可进一步保障 用户体验,并避免包含手工攻击恶 意发送垃圾验证短信。
根据业务特点,针对不同手机号码、不同访问源IP访问请求进行频率限制,防止高并发非法请求消耗更多的短信包和服务器性能,提高业务稳定性。
将手机短信验证和用户名密码设置分成两个步骤,用户在填写和校验有效的用户名密码后,下一步才进行手机短信验证,并且需要在获取第一步成功的回执之后才可进行校验。
为网站配置证书,启用https加密协议,防止传输明文数据被分析。
使用了图片验证码后,能防止攻击者有效进行“动态短信”功能的自动化调用。但若攻击者忽略图片验证码验证错误的情况,大量执行请求会给服务器带来额外负担,影响业务使用。建议在服务器端限>制单个 IP 在单位时间内的请求次数,一旦用户请求次数(包括失败请求次数)超出设定的阈值,则暂停对该 IP 一段时间的请求。