发表于: 2019-12-08 23:16:41
1 1336
今天完成的事:
1、完成验证防攻击策略。
使用redis的incr方法,会将key存储的数字值增加一,以此来实现注册号码的注册次数计数。如果key不存在,会将key的值初始化为0,然后再执行incr操作。
将对应的键值对设置过期时间,限制第一次注册后的三分钟内只能注册5次,注册次数过多则需要一小时后才能注册,这里测试时为了方便,设置为5分钟。
这里测试时发现,容联短信的验证发送有自己的防攻击策略,禁止短时间连续发送请求,但是没有找到具体的实现。
按照思路实现的结果,第五次注册时,会警告已注册五次。
第六次会直接限制注册。
工具类具体代码:
public class TelMailTestUtil {
private JedisUtil jedisUtil = new JedisUtil();
// 第一次注册后,可注册有限次数的时间
private final static int TIME_LIMIT = 60*3;
// 短时间已注册有限次数后,限制再次注册的时间
private final static int LAST_TIME_LIMIT = 60*5;
// 周期时间可注册的次数
private final static int MOST_TIMES = 5;
// 周期时间,注册号的添加标识符
private final static String TIMES = "_TIMES";
// 限制再次注册时间,注册号的添加标识符
private final static String LAST_TIMES = "_LAST_TIMES";
// 检查注册次数是否符合要求
public boolean timesTest(String tel){
// 周期时间的注册号标识符
String telTimes = tel + TIMES;
// 限制再次注册时间的注册号标识符
String telLastTimes = tel + LAST_TIMES;
// 表示注册超过次数后,已经过限制时间 LAST_TIME_LIMIT
if(jedisUtil.ttl(telLastTimes) == -2){
// 周期时间注册号的注册次数
Long times = jedisUtil.incr(telTimes);
System.out.println("该手机号注册次数为:"+ times +" 次");
// 第一次注册,设置过期时间3分钟
if(times == 1){
jedisUtil.expire(telTimes,TIME_LIMIT);
return true;
}
// 周期时间注册号,还未过期
if(jedisUtil.ttl(telTimes) != null && jedisUtil.ttl(telTimes) >= 0){
System.out.println("距离第一次注册过期时间还有"+ jedisUtil.ttl(telTimes) +"秒,可进行注册。");
// 周期时间内,达到注册次数
if(times == MOST_TIMES){
// 设置再次注册的间隔时间,即此处的过期时间
jedisUtil.setex(telLastTimes,LAST_TIME_LIMIT,String.valueOf(times));
System.out.println("该手机号已注册"+ times +"次,再次注册需要等待。");
}
return true;
}
// 未达上诉条件,均返回false
return false;
}
System.out.println("距离注册限时还有"+ jedisUtil.ttl(telLastTimes) +"秒,不可注册。");
// 注册超过次数后,未过限制时间,返回false
return false;
}
}
2、实现阿里云、七牛云数据迁移。
在阿里云oss控制台,有官方工具可以迁移数据。
数据迁移在公测中,需要申请。

在阿里云创建数据地址,分别是oss阿里的地址,为目标地址。其他,七牛云的地址,为源地址。
创建两个地址后,再创建迁移任务。
迁移成功。
明天计划的事:
1、将任务七要求集成到项目中,实现注册登录验证。
2、查看ajax,学习基本的验证操作。
遇到的问题:
验证防攻击完成,但是老感觉会有漏洞,暂时没检查出来。逻辑感觉不够清晰。
收获:
1、完成验证防攻击策略。
2、实现阿里云、七牛云数据迁移。
评论