滑动验证码应该大家都不陌生,在登录的时候都基本上遇到过,那怎么实现这样一个功能呢?
核心其实就两个,一个是后端造图 ,另一个是行为校验。
在后端随机选择一张背景图,再随机选择一个位置(X,Y),利用OpenCV或者Java的BufferedImage算法扣出一块拼图。
然后,在后端把背景图和拼图块转成Base64给前端,同时把正确的X坐标存到Redis中。
前端主要监听鼠标或者触摸事件,当用户拖动滑块时,前端不仅要记录最终滑动的距离,还要记录整个滑动轨迹。
当鼠标松开时,再把数据发给后端。
为了防止被机器识别破解,需要在后端进行双重校验。
第一重是判断前端传来的X偏移量和Redis中存储的X是否匹配;
第二重则是对轨迹进行分析,如果轨迹太过完美,可以直接判定为机器人。
因为一般来说,机器人的轨迹是匀速的,直线的 或者是一条完美的数学曲线。
但是,人的轨迹就很难做到这么完美,可能会有抖动,先快后慢或者还可能有回退。