优秀的编程知识分享平台

网站首页 > 技术文章 正文

「系统架构」滑动验证码真的安全?No,它也可以被破解

nanyue 2024-10-26 11:23:56 技术文章 2 ℃

随着移动互联网的飞速发展,各种类型的网站、移动APP等不断在野蛮增长,使得网络信息安全问题频现。为了防止批量注册、论坛灌水、恶意刷票、恶意撞库破解密码等,现在几乎所有平台都会验证码来检测、阻止恶意行为。

目前常见的验证码有图片验证码、滑动验证码和点触式验证码,但由于近来图片识别技术的成熟,现在使用图片验证码的应用正慢慢变少,转而更多的是使用滑动验证码和点触式验证码。滑动验证码和点触式验证码使用用户行为来验证,提升了用户体验,也增加了一定的安全性。

不过,最近来自一篇国外的文章介绍,滑动验证码也可以轻松破解,具体怎么破解,请看下面的内容。

我们知道按照验证码的设计,成功通过滑动验证码的限制,通常要执行如下几步操作:

  • 1、将鼠标放在滑动验证码的上方
  • 2、按鼠标
  • 3、移动鼠标
  • 4、释放鼠标

因此,要想破解一个滑动验证码,代码程序也需要模拟执行以上几步操作。在JS类库puppeteer中,可以使用move、down、up几个函数模拟以上几步。

首先,实例化浏览器实例

const browser = await puppeteer.launch({
 headless: false
 });

然后,解析页面

const page = await browser.newPage(); //解析一个新的页面。页面是在默认浏览器上下文创建的

跳转到指定页面

await page.goto("https://example.com/"); //跳转到 https://example.com/

移动鼠标,执行操作

await page.mouse.move(x,y)
await page.mouse.down()
await page.mouse.move(x,y,{step: 18})
await page.mouse.up()

如下就是使用puppeteer破解滑动验证码的几个案例:

1、普通的滑动验证码

这是一种入门级的滑动验证码,你只需要将验证码上的滑块移动至中间位置即可通过验证码限制。在本例中,表单包含两个输入框和一个滑动验证码,因此,要实现表单的自动提交,你需要先填充表单,然后再滑动滑块。代码实现如下:

2、表单在iframe中的滑动验证码

这种验证码与第1种很类似,不同之处在于此种验证码在iframe种,所以破解此种验证码,你需要先获取iframe元素,然后再在iframe中按照第1种的方式进行验证码破解。代码实现如下:

从图中我们可以看到,代码实现中多了一步,即:

await page.evaluateOnNewDocument(() => {
 Object.defineProperty(navigator, 'webdriver', {
 get: () => false
 })
});

这一步主要用于修正Javascript环境,以便后续操作iframe。

3、拼图型验证码

与1、2种相比,这种验证码相对要复杂很多,此种验证码不仅要移动滑块,而且还要保证滑块位置正确。为在保证滑块位置正确,这里要借助rembrandt.js,此类库主要用于对比图片,也就是在滑块移动的过程,通过不断对比图片,来判断滑块的位置是否正确。

代码实现如下:

效果如下:

看了上面的几个案例,是不是感觉道高一尺魔高一丈呢。其实,随着时间的推移,没有什么是绝对安全的。保证安全的唯一秘诀就是与时俱进,不断模拟攻守之道。


本文由“编码之道”原创,关注“编码之道”获取更多知识

最近发表
标签列表