解决前端反调试,阻止页面不断debugger

3,914 阅读2分钟

小编前两天遇到了一个问题,现在来重现一下:

在我爬xx网站的前端代码,我打开控制台要看Network,结果一打开控制台就不断的debugger,100ms一次,就让我很头疼,完全看不到页面内容 图下:

然后小编冷静分析

 每次我再断点停下来的时候页面就会跳到source这个tab页面,也能够看到他的debugger代码, 其实实现起来也不难,就一行代码

(function() {var a = new Date(); debugger; return new Date() - a > 100;}())

看起来是不是很简单,但是却很有效果 

就是不停的打断你,然后跳到source页面阻止我看到他的debugger代码,不断的产生不可回收的对象,占用内存,造成内存泄漏,没过多久浏览器就会卡顿,所以带来的影响还是挺大的,我就准备解决一下这个问题 

解决问题

其实这个问题解决起来也是很简单那就是:禁止断点 

chrome控制台的source Tab页点击Deactivate breakpoints按钮或者按下ctrl+f8图下: 

这样就O了,问题就解决了,但是这个方法有点杀敌一千自损八百的意思,毕竟这样禁止断点我们以后也没办法调试网站了,那有什么办法可以满足我们既能阻止网站一直debugger还能让我们继续调试网站的代码呢,那就要看网站怎么实现不断debugger了有的网站就做的比较简单,类似:

setInterval(startDebug, 100); // 举个例子function startDebug() { debugger; };

像这种情况的话就比较好解决,我们随便重新定义一下这个方法就行了,如下:

function startDebug() {};

也有些网站就厉害一点,用匿名函数来做的,例如:

setInterval(function () { debugger }, 100); // 举个例子

就在我为这个头疼的时候我一个朋友给我出了个解决方案:用条件断点来应对

setInterval(function () { debugger }, 100); // 举个例子

小编试了下,确实还ok但是又局限性,先说可以应对的情况,图下:

再来看看不能应对的情况,图下:

就是说条件断点的使用情况和集体代码的书写风格有关系,另外我发现Add conditional breakpoint 下面的Never pause here 也能在突破反调试的时候起到做用,局限性和Add conditional breakpoint 是一样的,用两个图来展示一下

 能work的情况:

不能work的情况:

**以上就是小编今天带来的内容 **

小编本身就是一名python开发工程师我自己花了三天时间整理了一套python学习教程从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴 点击 即可领取