惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
IT之家
IT之家
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
小众软件
小众软件
博客园 - 叶小钗
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
罗磊的独立博客
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理

BlogFinder

日常漫步 Vol.24 之漫步前山河 - 雅余 周报 #1-聊聊本周的收获 - Edwin's Blog 我的OpenCode必装插件与Skill Write Something 掌中之物未必在掌握之中 · CRIVU PiliNara,一个更顺手的 PiliPlus 分支 「NekoEcho」:做一个必有回响的猫娘主题博客 2026-05 书影音总结 简化博客主题 - 安迪 我第一次发布 npm 包 拾花小记#45:中考前的二三事 – 小改学习志 黛西花园5月游 #18 枇杷又熟了的五月月报 一些奇奇怪怪的需求?word仿方正书版的几个小操作 - Xiobb's Blog 0419 御温泉之旅 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 又回到四十年前 如何定义成功 迷鹿屋2026已重新上线 科技冰火两重天+一周回顾 ${title} 热度退了,我反而用得更深了-咕咚同学 我到底该不该换个域名? 随身WIFI折腾记 - 安迪 博客撰写体验提升——hexo pro插件 为什么不用相机把屏幕上的接关密码拍下来? 国清寺与天台山 – Ouroboros ★★★★☆《挽救计划》——久违的经济上行感 - Davidの3号基地 删除右键“打开方式”里多余选项 第三周刊_No.53|一切都会被支付两次
老板让我防黑客,我反手写了个"自爆程序"
Lycoris · 2026-06-17 · via BlogFinder

事情是这样的

今天老板走过来,拍了拍我的肩膀:"咱们的网站代码不能让人随便看,你想个办法,谁要是敢打开控制台,就让他见识见识社会的险恶。"

我寻思着,这不就是防君子不防小人吗?但老板发话了,咱得整活啊!

方案一:无限debugger,卡到你怀疑人生

setInterval(function() {
    check()
}, 1000);

var check = function() {
    function doCheck(a) {
        if (("" + a / a)["length"] !== 1 || a % 20 === 0) {
            (function() {}["constructor"]("debugger")())
        } else {
            (function() {}["constructor"]("debugger")())
        }
        doCheck(++a)
    }
    try {
        doCheck(0)
    } catch (err) {}
};
check();

原理是啥呢?

简单说就是:这代码跟个熊孩子似的,一直在那"debugger!debugger!debugger!"地喊。你要是开了控制台,它就在那不停地暂停、暂停、暂停,就像你打游戏的时候你妈一直在旁边喊"吃饭了"一样烦人。

但是! 这玩意儿有个致命缺点——它自己也会把自己累死。因为一直在递归调用,CPU占用蹭蹭往上涨,用户电脑风扇转得跟要起飞似的。而且人家高手来了,右键点个"永不在此暂停",这招就废了。

方案二:日志陷阱,钓鱼执法

function toDevtools(){
  let num = 0; 
  let devtools = new Date();
  devtools.toString = function() {
      num++;
      if (num > 1) {
          window.location.href = "http://www.fly63.com" // 直接送你去鬼屋
      }
  }
 console.log('', devtools);
}
toDevtools();

这招妙在哪呢?

你想啊,正常人谁会没事干打开控制台看日志?但凡打开控制台的,十有八九是来"参观学习"的。这代码就像在门口放了个陷阱:你没开门(没开控制台),啥事没有;你一开门,直接给你传送走,跳到别的网站去。

原理贼简单console.log 打印对象的时候,如果控制台关着,它就不干活;一旦控制台打开,它就得把对象显示出来,这时候就会调用 toString 方法。我们就在这个方法里做手脚,发现有人来了立马跑路。

但缺点也很明显:有些人就是手贱,开了控制台又关了,再开一次,第二次触发就直接gg了。而且万一用户清空了控制台或者浏览器抽风,这招就失效了。

方案三:加密通话,看不懂就对了

if(window.location.href.indexOf('#debug')==-1){
  setInterval(function(){
    (function (a) {return (function (a) {return (Function('Function(arguments[0]+"' + a + '")()'))})(a)})('bugger')('de', 0, 0, (0, 0));
  }, 1000);
}

看到这代码,我第一反应是:"这写的什么玩意儿?"

第二反应是:"嗯,就是要这个效果!"

原理:其实就是把 debugger 拆开了揉碎了,用字符串拼接、函数嵌套、Function 构造器各种花里胡哨的方式重新组装。你一眼看过去根本不知道它在干嘛,但是一运行,控制台就炸了。

这招的精华在于:代码写得越乱,别人越难改。就像一个学霸故意把字写得跟鬼画符似的,你抄都抄不明白。

但是:这玩意儿容易把自己玩死。如果没控制好频率,浏览器直接卡死,用户只能强制关掉页面,然后骂一句"什么垃圾网站"。

说了这么多,到底该用哪个?

讲真,以上所有方法,都只能防住小学生,防不住大学生

真正的高手,打开控制台的第一件事就是禁用所有 debugger 语句,或者直接用无痕模式、用 curl 抓数据,你这些招数在人家眼里就跟小孩子过家家一样。

所以我的建议是:

  1. 千万别用无限循环那一套,太耗性能了,用户还没被防住呢,自己先被用户投诉了。

  2. 用方案二(日志陷阱),性能开销小,不会影响正常用户。

  3. 配合一点小技巧,比如检测到控制台打开就清空 console.log 的内容,或者在控制台输出个"哥们别看了,真没啥好看的"。

最后说点掏心窝子的话

前端安全,永远都是魔高一尺道高一丈。你写再牛逼的反调试,人家开个无痕模式、装个插件,分分钟给你破了解。

真正应该做的

  • 敏感逻辑放后端

  • 重要的接口加签名

  • 核心算法混淆但别过度

至于检测开发者工具这玩意儿,就当个乐子玩玩得了。别把时间花在跟"黑客"较劲上,多写点业务代码,早点下班才是正事!

Lycoris的小破站

来自一个虚弱的略懂代码的暴躁程序猿发布的没什么技术与文采的文章

本网站的原创文章部分资源内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系博主邮箱:zzyo.yj@outlook.com 进行删除处理

本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。

本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向博主举报

声明:版权所有,违者必究 | 如未注明,均为原创 | 本网站采用CC BY-NC-SA 4.0 协议进行授权

转载:转载请注明原文链接 - Lycoris