当前位置:首页 > 技术文章 > 正文内容

小小验证码,作用可真不小(微信小小首富验证码)

zonemu2个月前 (08-07)技术文章39

来源:Java旅途

我们在开发用户登录功能的时候,总是会被要求加一个验证码的功能!那么,为什么要加这个验证码?验证码有什么作用?常见的验证码有哪些?

验证码就是为了增强网站的安全性,防止机器暴力破解。验证码一般都会设置为歪歪扭扭的图片,这样做的目的也是为了增加机器识别的难度。

机器一般会通过枚举法进行匹配验证码,枚举法是利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。

为了防止机器暴力破解,验证码一般会有一个过期时间,并且每个验证码只能被使用一次。

设置验证码有效时长:

redisService.setCacheObject(verifyKey, verifyCode, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);

每次使用验证码后删除redis:

private void checkCode(String code, String uuid) throws ValidateCodeException {

if (StringUtils.isEmpty(code)) {

throw new ValidateCodeException("图片验证码不能为空");

}

if (StringUtils.isEmpty(uuid)) {

throw new ValidateCodeException("图片验证码已失效");

}

String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;

String captcha = redisService.getCacheObject(verifyKey);

redisService.deleteObject(verifyKey);

}

IE浏览器下使用GET发送请求时,如果两次请求的地址和参数相同,在不刷新页面的情况下,浏览器会缓存第一次请求的内容,服务端更新后浏览器仍然显示第一次的内容。这也就是为什么我们总会看到验证码请求地址上会增加一个随机数的原因。

https://ip:port?getCode?random = new Date().getTime();

常见的验证码:

四位数字,随机的数字字符串,最原始的验证码,验证作用几乎为零。

随机数字+字母及干扰像素的图片。

滑动拼图(这种方式完全是由前端完成的)。

相关文章

Vue3,父组件子组件传值,provide(提供)和inject(注入)传值

父组件向子组件传值父子组件传递数据时,通常使用的是props和emit,父向子传递使用props,子向父传递使用emit。子组件接收3种方式// 1、简单接收 props:["title...

傻瓜式DEVOPS实践手册——Gitlab部署

GitLab是一款开放源代码的DevOps平台,用于实现从项目规划、源代码管理、CI/CD到监控和安全性的全方位集成。GitLab主要用于版本控制、协同开发、持续集成/持续部署 (CI/CD)、自动化...

程序员项目经理如何调动组员积极性

#这个方法应该很适合程序员都说程序员是比较傲娇,有点小自负(有的是相当,那不叫自负,那是实力的体现好吗),略微呆萌,自尊心偏小强的一类族群。是吗?中招了吗?作为管理好几个组员,要完成一个大项目的项目经...

程序员效率提升!使用自动化工具gitx,每周节约半小时

你是否经历过这样的折磨?一个 JIRA 需求要同时修复 dev、qa、staging 三个分支每个版本涉及 A、B、C 三个项目手动执行以下操作:从 dev 切临时分支cherry-pick 提交推送...

如何使用git clone克隆包含子模块的仓库

技术背景在软件开发中,当项目规模逐渐增大时,为了更好地管理代码,我们常常会使用子模块将项目拆分成多个独立的部分。Git 作为目前最流行的版本控制系统,提供了管理子模块的功能。但在克隆包含子模块的仓库时...

HTML5学习笔记三:HTML5语法规则(html5语法详解)

1.标签要小写2.属性值可加可不加””或”3.可以省略某些标签 html body head tbody4.可以省略某些结束标签 tr td li例:显示效果:5.单标签不用加结束标签img inpu...