强化安全登录验证码转存至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,可以带来一系列安全性强化,保障用户登录安全。


数据运维技术 » 强化安全登录验证码转存至Redis(登录验证码存redis)