java面试(1)如何防止恶意攻击短信验证码接口
防止恶意攻击短信验证码接口方法
1、手机号码限制:限制单个手机号码每天的最大发送次数。超过次数不能发送短信,可以考虑将手机号码加入黑名单,禁止1天。 2、短信发送时间间隔限制:限制同一个手机号码重复发送的时间间隔。通常设置为60-120秒,前端做倒计时限制,时间未到不能点击发送短信按钮,后台也做时间间隔限制,时间未到不能发送短信。 3、IP地址限制:限制每个IP地址每天的最大发送次数。防止通过同一个IP地址不同手机号码进行恶意攻击。超过次数不能发送短信,可以考虑将IP地址加入黑名单,禁止1天。可以考虑限制同一个IP地址每分钟的接口请求频率。 4、发送流程限制:将流程分成两个步骤。如:注册用户,将发送短信验证码和设置用户名密码分成两个步骤,第一步一个页面用来设置用户名和密码,用户设置用户名和密码发送到后台,获取到后台返回的第一步成功回执之后,进入第二步另一个页面发送手机短信验证码。 忘记密码,找回密码,第一步输入用户名,第二步发送短信验证码。 5、增加图片验证码:发送短信验证码时,要求输入图片验证码,每个图片验证码仅能使用1次,使用1次后,不管输入的图片验证码是否正确自动失效。如果输入错误更新图片验证码。图片验证码失效可以防止图片验证码识别软件尝试多次识别,可以考虑复杂的图片验证码或点触验证、滑动验证。 6、对发送者进行唯一性识别:防止修改参数伪造多个IP地址和手机号码进行恶意攻击,用Token作为唯一性识别标识,后台将Token注入到前端,前端可以获取到Token,请求发送短信验证码接口时带上Token,后台接收到Token进行验证,验证未通过不能发送短信。 7、发送短信验证码,短信验证码有效期内,发送相同的短信验证码。比如设置30分钟有效,短信发送时间间隔限制为60秒,第一次发送之后,60秒倒计时结束,点击按钮第二次发送,第二次发送的验证码和第一次相同。 8、短信验证码可以考虑数字和字母组合。 9、短信验证码输入错误次数限制,比如设置短信验证码输入错误3次后,这个短信验证码就不能使用了。防止猜测短信验证码恶意注册。 10、上行短信验证码:对于可疑用户要求其主动发短信。