怎么实现一个滑动验证码功能?又如何防止被机器识别破解

滑动验证码应该大家都不陌生,在登录的时候都基本上遇到过,那怎么实现这样一个功能呢?

核心其实就两个,一个是后端造图 ,另一个是行为校验

在后端随机选择一张背景图,再随机选择一个位置(X,Y),利用OpenCV或者Java的BufferedImage算法扣出一块拼图。

然后,在后端把背景图和拼图块转成Base64给前端,同时把正确的X坐标存到Redis中。

前端主要监听鼠标或者触摸事件,当用户拖动滑块时,前端不仅要记录最终滑动的距离,还要记录整个滑动轨迹。

当鼠标松开时,再把数据发给后端。

为了防止被机器识别破解,需要在后端进行双重校验

第一重是判断前端传来的X偏移量和Redis中存储的X是否匹配;

第二重则是对轨迹进行分析,如果轨迹太过完美,可以直接判定为机器人。

因为一般来说,机器人的轨迹是匀速的,直线的 或者是一条完美的数学曲线。

但是,人的轨迹就很难做到这么完美,可能会有抖动,先快后慢或者还可能有回退。

相关推荐
小北方城市网1 分钟前
JVM 调优实战指南:从问题排查到参数优化
java·spring boot·python·rabbitmq·java-rabbitmq·数据库架构
Elieal2 分钟前
Java项目密码加密实现详解
java·开发语言
RunsenLIu4 分钟前
基于Spring Boot + Vue的图书馆座位预约管理系统
vue.js·spring boot·后端
shhpeng4 分钟前
go mod vendor命令详解
开发语言·后端·golang
Java程序员威哥4 分钟前
用Java玩转机器学习:协同过滤算法实战(比Python快3倍的工程实现)
java·开发语言·后端·python·算法·spring·机器学习
牧小七9 分钟前
java StampedLock 的使用
java
逍遥德18 分钟前
Postgresql 系统表作用解释
数据库·后端·sql·postgresql
CryptoRzz24 分钟前
如何高效对接美股实时行情?StockTV API 实战集成指南
java·python·flask·区块链·maven·symfony
MonkeyKing_sunyuhua42 分钟前
ES文档序号写错的问题的修复
java·数据库·elasticsearch
小豪GO!44 分钟前
Spring-八股
java·spring boot·spring