强化安全登录验证码转存至Redis(登录验证码存redis)
强化安全:登录验证码转存至Redis
为了保障用户登录的安全,开发者应当强化登录验证码安全性,Clean-Code 主张将验证码从内存中转存至Redis,以下介绍:
Redis存储结构
我们使用hash结构存储验证码,结构如下:
key:code
value: {(字段)
code:123456(验证码值)
time:23456(添加时间)
}
客户端操作
客户端首先生成一个随机6位验证码,如 “ABCDEF”,并将时间戳以毫秒计算回传,如23456。之后,请求使用以下代码发送验证码至服务器。
// 将验证码和时间戳用hash结构存储至Redis
Map map = new HashMap();
map.put(“code”, code);
map.put(“time”, String.valueOf(time));
stringRedisTemplate.opsForHash().putAll(“code”, map);
服务端验证
服务端接收到验证码后,首先验证其有效性,再从Redis中获取时间戳和用户输入的时间戳进行比较,查看验证码有效期是否在30s内,如果有效则验证通过。
// 获取验证码 value
String redisCode = (String) stringRedisTemplate.opsForHash().get(“code”, “column”);
String redisTamp = (String) stringRedisTemplate.opsForHash().get(“code”, “time”);
// 判断当前时间是否在之前30s内
Long time1 = Long.valueOf(redisTamp);
Long time2 = System.currentTimeMillis();
if (!Strings.isNullOrEmpty(redisCode) && redisCode.equals(code)) {
if (time2 – time1
// 30s内有效
}
else {
// 30s失效
}
}
else {
// 验证码不正确
}
由以上可以看出,将登录验证码转存至Redis,可以带来一系列安全性强化,保障用户登录安全。