从一个简单的反爬小技巧说起

966 阅读3分钟

最近修仙时发现了很多有意思的反爬技巧,今天就从一个最简单的反爬技巧说起:debugger

1、反爬开始

debugger 是个断点调试语句,在正常情况下是不会被触发的,只有当有调试器可用的时候,如用户打开了控制台,才会进入断点调试。

只有一句debugger,用户点一下蓝色小箭头就可以跳过。

但,如果我们有无数debugger呢?没错,就是这么粗暴:

const debug = new Function('debugger');
setInterval(debug, 0);

这里用定时器不断调用 debug() 函数,会不断产生debugger语句,用户即便拼上单身多年的手速也跳不出调试语句。

难道这样开启 debugger 无限地狱就能成功反爬了吗?

2、反反爬

当然没有这么简单,如图所示:

在debugger代码的左侧空白处右键,选择 Add conditional breakpoint ,再输入false,回车,最后刷新浏览器,就能跳过无限调试,成功反反爬!

那么,我们有没有办法反 反反爬?

3、反 反反爬

答案当然是有。

上面之所以能跳过无限调试,是因为每次调用的都是同一句debugger,如果我们每次生成的debugger都是不一样的,就能成功反反反爬了:

const appendDebug = function(){
  const d = document.createElement("script");
  d.innerHTML = "debugger";
  document.body.appendChild(d);
}
setInterval(appendDebug, 0);

难道这样就能阻止爬虫了吗?当然...不可能,可以直接干脆关闭调试功能,继续爬......

此外,还有一些其他辅助技巧,比如通过浏览器的宽度和高度变化来判断是否打开了控制台,这种方法也很容易破解,就是让控制台独立打开:

其他

除了上面这个简单的debugger,还有很多你可能想都想不到的反爬技巧,比如字体反爬、CSS偏移、伪元素内容等等。于是,道高一尺魔高一丈,也有一些相应的反反爬技巧,魔高一丈道再高一尺,又会有一些反反反爬技巧......

总结

纯前端的反爬能力毕竟有限,且大多容易破解。因此在实际反爬中,更常用的是IP限制、验证码、请求头校验等等,虽然这些反爬手段也有破解之法,但相对纯前端的反爬来说,破解成本会更高。

最后,爬虫违法吗?

技术无罪,但使用技术的人却可能用技术进行犯罪。这里有一个开源项目,汇总了很多国内爬虫违法违规的案例,道友们可引以为戒:github.com/HiddenStraw…


往期文章

当我们谈Currying时,我们在谈些什么

现代包管理工具:pnpm

硬核!手撕源码第一弹: UpdateNotifier

前端转后端是一种怎样的体验

当程序员遇到会写代码的产品经理......

手摸手写个webpack plugin

手摸手写个webpack loader

这锅我背了......

ES2021新特性

用魔法打败魔法:前端代码规范化

手摸手教你搭个脚手架

手摸手教你搭建npm私有库

requestAnimationFrame