编程 禁止调试前端页面代码

2024-11-19 02:17:33 +0800 CST views 618

别想调试我的前端页面代码!

在这篇文章中,我们将探讨一些常见的前端防调试技巧,而不涉及禁止右键菜单、禁用F12快捷键或代码混淆等方案。

无限 debugger 方法

基础方案

防止调试的一种基础方法是通过不断输出 debugger 语句。打开开发者工具时,debugger 语句会阻止代码正常执行,使得断点调试变得不可能。如下是一个基础的实现:

(() => {
  function ban() {
    setInterval(() => { debugger; }, 50);
  }
  try {
    ban();
  } catch (err) { }
})();

通过这个方案,每隔50毫秒就会触发一次 debugger,有效阻止调试器的正常运行。

高级方案:基于浏览器宽高检测

根据浏览器窗口的外部高度与内部高度的差异,可以判断是否打开了开发者工具。打开F12后,窗口尺寸会发生变化,通过比较可以进行防调试操作:

(() => {
  function block() {
    if (window.outerHeight - window.innerHeight > 200 || window.outerWidth - window.innerWidth > 200) {
      document.body.innerHTML = "检测到非法调试";
    }
    setInterval(() => {
      (function () {
        return false;
      }
      ['constructor']('debugger')
      ['call']());
    }, 50);
  }
  try {
    block();
  } catch (err) { }
})();

该方案不仅能够检测窗口大小的变化,还能不断调用 debugger 来阻止调试。

关闭断点,跳转空白页面

如果用户打开了开发者工具,则会通过 debugger 判断,并在发现调试器被激活时跳转到空白页面。这是一种流行的反调试方法,如某些应用也采用了类似的方案:

setInterval(function () {
  var startTime = performance.now();
  // 设置断点
  debugger;
  var endTime = performance.now();
  // 判断是否超出阈值(例如100毫秒)
  if (endTime - startTime > 100) {
    window.location.href = 'about:blank';
  }
}, 100);

通过 performance.now() 测量 debugger 执行的时间间隔,判断是否打开了开发者工具,超过阈值时跳转到空白页。

第三方插件

disable-devtool 插件

disable-devtool 是一个可以禁用各种进入开发者工具方法的插件,防止通过开发者工具进行代码调试。它有以下特点:

  • 支持禁用右键菜单、F12、Ctrl+Shift+I 等快捷键。
  • 能够识别从浏览器菜单栏打开的开发者工具,并自动关闭当前页面。
  • 支持配置和自定义,体积小巧,适用于多种浏览器(包括IE、Chrome、FireFox等)。
  • 能够识别并关闭开发者工具的事件,同时识别 erudavConsole 调试工具。

使用示例:

通过CDN引用disable-devtool插件:

<script disable-devtool-auto src='https://cdn.jsdelivr.net/npm/disable-devtool'></script>

更多配置和使用方法请参考 官方文档

console-ban 插件

console-ban 是另一个轻量级的插件,能够禁止通过F12或审查元素开启控制台。它可以减少站点被攻击或爬虫的几率。

使用示例:

通过CDN引用console-ban插件并初始化:

<head>
  <script src="https://cdn.jsdelivr.net/npm/console-ban@5.0.0/dist/console-ban.min.js"></script>
  <script>
    // 初始化默认配置
    ConsoleBan.init();
    // 自定义配置
    ConsoleBan.init({
      redirect: '/404'
    });
  </script>
</head>

console-ban 也可以通过 npm 或 yarn 安装:

yarn add console-ban

在项目中引用并初始化:

import { init } from 'console-ban';

init({ redirect: '/404' });

你可以配置重定向、页面重写或者自定义回调函数来处理用户打开控制台的行为。

结语

以上方法可以有效增加调试的难度,使得攻击者难以通过前端调试器获取代码。但需要注意的是,这些防调试技术只是增加了调试的难度,并不能完全阻止恶意攻击者。如果涉及敏感信息或重要逻辑,建议在后端进行处理,以避免前端防护的局限性。

下篇文章我们会介绍如何绕过这些前端调试限制。


原文链接: 禁止调试前端页面代码

参考资料:

复制全文 生成海报 前端开发 安全 调试技术

推荐文章

介绍25个常用的正则表达式
2024-11-18 12:43:00 +0800 CST
10个几乎无人使用的罕见HTML标签
2024-11-18 21:44:46 +0800 CST
如何将TypeScript与Vue3结合使用
2024-11-19 01:47:20 +0800 CST
CSS 中的 `scrollbar-width` 属性
2024-11-19 01:32:55 +0800 CST
PHP中获取某个月份的天数
2024-11-18 11:28:47 +0800 CST
记录一次服务器的优化对比
2024-11-19 09:18:23 +0800 CST
Python Invoke:强大的自动化任务库
2024-11-18 14:05:40 +0800 CST
Go语言中的`Ring`循环链表结构
2024-11-19 00:00:46 +0800 CST
Dropzone.js实现文件拖放上传功能
2024-11-18 18:28:02 +0800 CST
实现微信回调多域名的方法
2024-11-18 09:45:18 +0800 CST
Go 协程上下文切换的代价
2024-11-19 09:32:28 +0800 CST
MySQL 主从同步一致性详解
2024-11-19 02:49:19 +0800 CST
Redis和Memcached有什么区别?
2024-11-18 17:57:13 +0800 CST
介绍 Vue 3 中的新的 `emits` 选项
2024-11-17 04:45:50 +0800 CST
html折叠登陆表单
2024-11-18 19:51:14 +0800 CST
开源AI反混淆JS代码:HumanifyJS
2024-11-19 02:30:40 +0800 CST
php内置函数除法取整和取余数
2024-11-19 10:11:51 +0800 CST
如何配置获取微信支付参数
2024-11-19 08:10:41 +0800 CST
什么是Vue实例(Vue Instance)?
2024-11-19 06:04:20 +0800 CST
CSS实现亚克力和磨砂玻璃效果
2024-11-18 01:21:20 +0800 CST
回到上次阅读位置技术实践
2025-04-19 09:47:31 +0800 CST
程序员茄子在线接单