1.本发明属于验证码安全的技术领域,具体涉及一种基于轨迹绘制交互的安全验证码生成方法、系统及介质。
背景技术:2.在用户认证过程中,存在着大量以验证码为主要形式的安全验证操作。而目前市面上的大多数验证码都存在较为容易的破解方式,安全性能低。而少部分具有高安全性的验证码又一味增大了识别难度,不仅机器难以识别,人类也难以识别,用户体验感极差。
3.目前市面上主流的几种行为验证码,例如,文字输入式验证码和文字点选验证码,这两类验证码尽管操作简单,但随着ocr技术的发展,有效识别图片上的文字并完成相应模拟行为也变得简单。滑块式验证码通过用户简单拖动滑块放置到正确位置,根据鼠标的轨迹进行数据分析判别是人还是机器。然而识别验证码图片缺口的方法层出不穷,例如:使用人工智能机器学习、使用边缘检测算法、对完整图片与缺失滑块的图片各像素的亮度进行对比,在完成缺口识别后即可得到模拟拖动的终点位置。而有的验证码为了增大破解难度,盲目给背景图片加噪,虽然图片识别难度增加了,但是也给人类识别增加了难度。
技术实现要素:4.本发明的主要目的在于克服现有技术的缺点与不足,提供一种基于轨迹绘制交互的安全验证码生成方法、系统及介质。
5.为了达到上述目的,本发明采用以下技术方案:
6.本发明的一个方面,提供了一种基于轨迹绘制交互的安全验证码生成方法,包括下述步骤:
7.s1、制定用于抵抗验证码攻击的安全规则;
8.s2、客户端加载javascript代码初始化验证码组件,向服务端请求进行身份认证;
9.s3、服务端产生数据令牌、验证码题目与图片,并将相关信息存入数据库中;对产生的图片添加干扰,传入客户端;
10.s4、客户端运用恢复算法将打乱后的验证码图片恢复并显示;
11.s5、客户端记录用户绘制的轨迹信息,将轨迹信息数据和数据令牌一起加密后传输给服务端;
12.s6、服务端对收到的数据解密后,根据数据令牌读取验证码相关信息,据此判别用户提交的轨迹信息,并将结果返回给用户。
13.作为优选的技术方案,所述安全规则具体为:
14.s11、使用javascript检测用户是否正在尝试使用无头浏览器加载验证码组件,如果是则中止加载,不允许进行验证;
15.s12、使用c语言对javascript中的部分逻辑进行重写,使用emscripten编译到webassembly字节码后提供相关函数给javascript代码调用。
16.作为优选的技术方案,所述数据令牌、验证码题目与图片的产生和处理过程如下:
17.s31、随机生成由字母和数字组成的字符串作为数据令牌challengetoken;
18.s32、从收集好的词库中随机获取一个字数为二到四个字之间的词语作为验证码的题目;
19.s33、随机获取一张图片作为背景图,随机生成验证码题目中各个文字的参数,包括文字的位置坐标、字号大小、角度和颜色;所述文字的颜色与背景图上文字位置的颜色的yuv颜色模式y通道的值存在区别;将文字按照所述参数绘制到背景图上,最后在图片上添加噪声干扰,得到将会展示给用户的验证码图片;
20.s34、将数据令牌challengetoken与验证码的题目信息存入redis数据库中;
21.s35、使用洗牌算法将图片以16x16的小块为单位“打乱”添加干扰,并传输至客户端。
22.作为优选的技术方案,所述记录用户绘制的轨迹信息具体为:
23.s51、在桌面端用户在验证码图片上按下鼠标左键,或移动端用户触摸验证码图片时,开始记录用户绘制的轨迹;
24.s52、每隔25毫秒,以毫秒为单位记录一次从绘制开始到此时所经过的时间,并记录此时鼠标或触摸点在验证码图片上的位置;
25.s53、当鼠标或触摸点的位置移动到验证码图片显示区域以外,或用户松开鼠标左键和停止触摸,或记录的轨迹点数量达到预设的最大个数个,则停止记录用户绘制的轨迹;
26.s54、客户端对轨迹信息数据和数据令牌使用rc4加密后传输给服务端。
27.作为优选的技术方案,所述步骤s6中的服务端判别轨迹信息过程如下:
28.s61、服务端获取轨迹信息数据和数据令牌后,先对数据进行解密获取challengetoken,依据challengetoken在redis数据库中调出题目信息;
29.s62、使用判定轨迹算法判断是否为机器操作;
30.s63、若验证通过则产生一个验证令牌verifytoken,设置有效期存入数据库并加密传输给客户端;若不通过,则停止工作;
31.s64、客户端将接收到的验证令牌verifytoken和其他业务数据一并传输给服务端等待验证;
32.s65、服务端将在redis数据库中查询verifytoken是否存在,若存在则验证成功,并销毁数据库中的verifytoken,向客户端返回验证成功消息;若不存在,则向客户端返回验证失败消息。
33.作为优选的技术方案,所述判定轨迹算法具体为:
34.(1)判定起点和终点,具体为:判断点的轨迹的起点和终点是否在图片上所给题目文字的位置范围内;
35.(2)判定连线时间,具体为:若连线时间若超过0.8s,则验证不通过,判定为机器操作;
36.(3)判定斜率,具体为:若后续点到第一个点的斜率95%的概率相同,则判定为机器操作的直线;
37.(4)判定离散点到标准直线的距离,具体为:若离散点到标准轨迹直线的距离过大,则判定为机器操作。
38.本发明的另一个方面,提供了一种基于轨迹绘制交互的安全验证码生成系统,应用于上述的基于轨迹绘制交互的安全验证码生成方法,包括安全规则制定模块、初始化模块、数据令牌及验证码生成模块、验证码恢复模块、轨迹信息记录模块以及身份验证模块;
39.所述安全规则制定模块用于制定用于抵抗验证码攻击的安全规则;
40.所述初始化模块用于加载javascript代码初始化验证码组件,向服务端请求进行身份认证;
41.所述数据令牌及验证码生成模块用于产生数据令牌、验证码题目与图片,并将相关信息存入数据库中;对产生的图片添加干扰,传入客户端;
42.所述验证码恢复模块运用恢复算法将打乱后的验证码图片恢复并显示;
43.所述轨迹信息记录模块用于记录用户绘制的轨迹信息,将轨迹信息数据和数据令牌一起加密后传输给服务端;
44.所述身份验证模块用于在服务端对收到的数据解密后,根据数据令牌读取验证码相关信息,据此判别用户提交的轨迹信息,并将结果返回给用户。
45.本发明的另一个方面,提供了一种存储介质,存储有程序,所述程序被处理器执行时,实现上述的基于轨迹绘制交互的安全验证码生成方法。
46.本发明与现有技术相比,具有如下优点和有益效果:
47.(1)本发明的方案从验证码产生到验证结束过程进行了一系列处理,包括洗牌算法打乱服务端给出的图片;对发送的数据使用rc4加密算法进行加密;在javascript中检测到无头浏览器时拒绝进行验证;使用c语言对javascript中的部分逻辑进行重写并以编译到webassembly字节码的方式提供给javascript调用;使用提取人类绘制轨迹特征设计的算法判别机器行为。这些技术手段大大提高了本发明的验证方案的安全性和正确性,能够有效防止ocr图片识别技术的破解以及机器模拟生成轨迹的行为。
附图说明
48.图1是本发明实施例基于轨迹绘制交互的安全验证码生成方法的实际应用示意图;
49.图2是本发明实施例基于轨迹绘制交互的安全验证码生成方法的业务流程图;
50.图3是本发明实施例基于轨迹绘制交互的安全验证码生成方法的具体步骤流程图;
51.图4是本发明实施例基于轨迹绘制交互的安全验证码生成系统的结构示意图;
52.图5是本发明实施例的存储介质的结构示意图。
具体实施方式
53.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
54.实施例
55.本实施例所述的方案提出了一种基于轨迹绘制交互的安全验证码生成方法。其
中,验证码的“题目”为一个字数为二到四个字之间的词语,用户需要在写有多个文字(其中可能包括验证码题目的词语中未出现的文字)的图片上通过有序地拖拽鼠标或触屏绘制滑动的轨迹,将给出的词语按照顺序连接起来,如图1所示。
56.本实施例所述的方案主要包括四种角色:用户、客户端、服务端、数据库。客户端、服务端和数据库之间通过http协议进行通信,其中,用户是本发明验证的主体;客户端主要负责监控并记录用户行为并且抵挡各类针对验证码的攻击;服务端主要负责产生验证码信息,对用户行为进行验证;数据库主要负责存储验证码题目数据和相关验证数据。
57.假设以用户m、客户端、服务端、数据库为例,用户轨迹信息记为track={id,(x1,y1,t1),(x2,y2,t2)
…
(xn,yn,tn)},数据库存入的题目信息记为question={(a1,b1),(a2,b2),r,challengetoken},数据库存入的验证信息记为verify={verifytoken,time}。
58.如图1所示,本实施例提供了一种基于轨迹绘制交互的安全验证码生成方法,包括以下步骤:
59.s1、制定用于抵抗验证码攻击的安全规则;
60.更进一步的,所述安全规则具体为:
61.s11、使用javascript检测用户是否正在尝试使用selenium等无头浏览器加载验证码组件,如果是则中止加载,不允许进行验证;
62.s12、使用c语言对javascript中的部分逻辑进行重写,使用emscripten编译到编译到webassembly字节码后提供相关函数给javascript代码调用。
63.s2、客户端加载javascript代码初始化验证码组件,向服务端请求进行身份认证;
64.s3、服务端产生数据令牌、验证码题目与图片,并将相关信息存入数据库中;对产生的图片添加干扰,传入客户端;
65.更进一步的,所述数据令牌、验证码题目与图片的产生和处理过程如下:
66.s31、随机生成由字母和数字组成的字符串作为数据令牌challengetoken;
67.s32、从收集好的词库中随机获取一个字数为二到四个字之间的词语作为验证码的题目;
68.s33、随机获取一张图片作为背景图,随机生成验证码题目中各个文字的参数,包括文字的位置坐标、字号大小、角度和颜色;所述文字的颜色与背景图上文字位置的颜色的yuv颜色模式y通道的值存在区别;将文字按照所述参数绘制到背景图上,最后在图片上添加噪声干扰,得到将会展示给用户的验证码图片;
69.s34、将题目信息
70.question={{(a1,b1),(a2,b2),
…
,(an,bn)},r,challengetoken}存入redis数据库,其中{(a1,b1),(a2,b2),
…
,(an,bn)}为题目中各个文字的坐标,r为字的所占区域的大小半径,challengetoken为验证令牌;
71.s35、使用洗牌算法将图片以16x16的小块为单位“打乱”添加干扰,并传输至客户端。
72.s4、客户端运用恢复算法将打乱后的验证码图片恢复并显示;
73.s5、记录用户绘制的轨迹信息,其中用户绘制的轨迹信息记为track,track={challengetoken,(x1,y1,t1),(x2,y2,t2)
…
(xn,yn,tn)},并将数据加密后传输给服务器;其中(x1,y1,t1),(x2,y2,t2)
…
(xn,yn,tn)是轨迹中各个点的坐标和采样时间信息。
74.更进一步的,所述记录用户绘制的轨迹信息具体为:
75.s51、在桌面端用户在验证码图片上按下鼠标左键,或移动端用户触摸验证码图片时,开始记录用户绘制的轨迹;
76.s52、每隔25毫秒,以毫秒为单位记录一次从绘制开始到此时所经过的时间,并记录此时鼠标或触摸点在验证码图片上的位置;
77.s53、当鼠标或触摸点的位置移动到验证码图片显示区域以外,或用户松开鼠标左键和停止触摸,或记录的轨迹点数量达到预设的最大个数个,则停止记录用户绘制的轨迹;
78.s54、客户端对轨迹信息数据和数据令牌使用rc4加密后传输给服务端。
79.s6、服务端判别轨迹信息,并将结果返回给客户端。
80.更进一步的,所述步骤s6中的服务器判别轨迹信息过程如下:
81.s61、服务端获取轨迹信息数据和数据令牌后,先对数据进行解密获取challengetoken,依据challengetoken在redis数据库中调出题目信息question;
82.s62、使用的判定轨迹算法如下:
83.(1)判定起点和终点,具体为:判断点的轨迹的起点和终点是否在图片上所给题目文字的位置范围内;
84.(2)判定连线时间,具体为:若连线时间若超过0.8s,则验证不通过,判定为机器操作;
85.(3)判定斜率,具体为:若后续点到第一个点的斜率95%的概率相同,则判定为机器操作的直线;
86.(4)判定离散点到标准直线的距离,具体为:若离散点到标准轨迹直线的距离过大,则判定为机器操作;
87.s63、若验证通过则产生一个验证令牌verifytoken,设置有效期time,将信息verify={verifytoken,time}存入数据库,并将verifytoken加密传输给客户端;若不通过,则停止工作;
88.s64、客户端解密获取信息后,将包括验证令牌verifytoken、用户名username、用户密码password的用户验证信息封装成用户信息infor={verifytoken,username,password}通过数据加密传输至服务端等待验证;其中,客户端解密得到的verifytoken可为null,此时表示验证不通过,用户需要返回步骤s2,重新进行验证。
89.s65、服务端解密数据后,将在redis库中查询verifytoken是否存在,若不存在,则向客户端返回验证失败消息;若存在,则继续验证用户名和用户密码是否匹配,若不匹配,返回验证码失败信息,若匹配则验证成功,向客户端返回验证成功消息。在verifytoken存在的情况下,服务端在继续验证用户名和用户密码后,无论是否匹配,均销毁数据库中的verifytoken。
90.如图4所示,在本技术的另一个实施例中,提供了一种基于轨迹绘制交互的安全验证码生成系统,该系统包括安全规则制定模块、初始化模块、数据令牌及验证码生成模块、验证码恢复模块、轨迹信息记录模块以及身份验证模块;
91.所述安全规则制定模块用于制定用于抵抗验证码攻击的安全规则;
92.所述初始化模块用于加载javascript代码初始化验证码组件,向服务端请求进行身份认证;
93.所述数据令牌及验证码生成模块用于产生数据令牌、验证码题目与图片,并将相关信息存入数据库中;对产生的图片添加干扰,传入客户端;
94.所述验证码恢复模块运用恢复算法将打乱后的验证码图片恢复并显示;
95.所述轨迹信息记录模块用于记录用户绘制的轨迹信息,将轨迹信息数据和数据令牌一起加密后传输给服务端;
96.所述身份验证模块用于在服务端对收到的数据解密后,根据数据令牌读取验证码相关信息,据此判别用户提交的轨迹信息,并将结果返回给用户。
97.在此需要说明的是,上述实施例提供的系统仅以上述各功能模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能,该系统是应用于上述实施例的一种基于轨迹绘制交互的安全验证码生成方法。
98.如图5所示,在本技术的另一个实施例中,还提供了一种存储介质,存储有程序,所述程序被处理器执行时,实现一种基于轨迹绘制交互的安全验证码生成方法,具体为:
99.s1、制定用于抵抗验证码攻击的安全规则;
100.s2、客户端加载javascript代码初始化验证码组件,向服务端请求进行身份认证;
101.s3、服务端产生数据令牌、验证码题目与图片,并将相关信息存入数据库中;对产生的图片添加干扰,传入客户端;
102.s4、客户端运用恢复算法将打乱后的验证码图片恢复并显示;
103.s5、客户端记录用户绘制的轨迹信息,将轨迹信息数据和数据令牌一起加密后传输给服务端;
104.s6、服务端对收到的数据解密后,根据数据令牌读取验证码相关信息,据此判别用户提交的轨迹信息,并将结果返回给用户。
105.应当理解,本技术的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
106.上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。