别想调试我的前端代码!

 
 
大厂技术  高级前端  Node进阶
点击上方 程序员成长指北,关注公众号
回复1,加入高级Node交流群

hello大家好,我是考拉🐨。作为web开发者,我们应该都有这样一个认识:前端代码是公开的,所有人都能拿到我们代码,不能把秘钥等信息写死在前端。为了避免他人轻易看懂前端代码,通常我们会对代码进行压缩、混淆等处理。今天带来一篇文章,作者介绍了几种避免他人调试前端代码的常见方式,感兴趣的同学可以在自己项目里试试。

下面是正文部分。

这里我们不介绍禁止右键菜单, 禁止F12快捷键代码混淆方案。

无限debugger

  • 前端页面防止调试的方法主要是通过不断 debugger 来疯狂输出断点,因为 debugger 在控制台被打开的时候就会执行

  • 由于程序被 debugger 阻止,所以无法进行断点调试,所以网页的请求也是看不到的.

基础方案

(() => {
  function ban() {
    setInterval(() => { debugger; }, 50);
  }
  try {
    ban();
  } catch (err) { }
})();
  • setInterval 中的代码写在一行,可以禁止用户断点,即使添加 logpointfalse 也无用

  • 当然即使有些人想到用左下角的格式化代码,将其变成多行也是没用的

浏览器宽高

根据浏览器宽高、与打开F12后的宽高进行比对,有差值,说明打开了调试,则替换html内容;

  • 通过检测窗口的外部高度和宽度与内部高度和宽度的差值,如果差值大于 200,就将页面内容设置为 "检测到非法调试"。

  • 通过使用间隔为 50 毫秒的定时器,在每次间隔内执行一个函数,该函数通过创建一个包含 debugger 语句的函数,并立即调用该函数的方式来试图阻止调试器的正常使用。

(() => {
  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的这一点,如果你打开开发者工具一定会被debugger卡住,那么上下文时间间隔就会增加,在对时间间隔进行判断,就能巧妙的知道绝对开了开发者工具,随后直接跳转到空白页,一气呵成。(文心一言采用方案)

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

第三方插件

disable-devtool

disable-devtool可以禁用所有一切可以进入开发者工具的方法,防止通过开发者工具进行的代码搬运。

该库有以下特性:

  1. 支持可配置是否禁用右键菜单

  2. 禁用 f12 和 ctrl+shift+i 等快捷键

  3. 支持识别从浏览器菜单栏打开开发者工具并关闭当前页面

  4. 开发者可以绕过禁用 (url参数使用tk配合md5加密)

  5. 多种监测模式,支持几乎所有浏览器(IE,360,qq浏览器,FireFox,Chrome,Edge...)

  6. 高度可配置、使用极简、体积小巧

  7. 支持npm引用和script标签引用(属性配置)

  8. 识别真移动端与浏览器开发者工具设置插件伪造的移动端,为移动端节省性能

  9. 支持识别开发者工具关闭事件

  10. 支持可配置是否禁用选择、复制、剪切、粘贴功能

  11. 支持识别 eruda 和 vconsole 调试工具

  12. 支持挂起和恢复探测器工作

  13. 支持配置ignore属性,用以自定义控制是否启用探测器

  14. 支持配置iframe中所有父页面的开发者工具禁用

🦂使用🦂

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

更多使用方法参见官网:disable-devtool

disable-devtool

console-ban禁止 F12 / 审查开启控制台,保护站点资源、减少爬虫和攻击的轻量方案,支持重定向、重写、自定义多种策略。

使用
<head>
  <!-- ... -->
  <script src="https://cdn.jsdelivr.net/npm/console-ban@5.0.0/dist/console-ban.min.js"></script>
  <script>
    // default options
    ConsoleBan.init()
    // custom options
    ConsoleBan.init({
      redirect: '/404'
    })
  </script>
</head>

在项目中使用:

yarn add console-ban
import { init } from 'console-ban'

init(options)
重定向
ConsoleBan.init({
  // 重定向至 /404 相对地址
  redirect: '/404',
  // 重定向至绝对地址
  redirect: 'http://domain.com/path'
})

使用重定向策略可以将用户指引到友好的相关信息地址(如网站介绍),亦或是纯静态 404 页面,高防的边缘计算或验证码等页面。

注:若重定向后的地址可以通过 SPA 路由切换或 pjax 局部加载技术等进行非真正意义上的页面切换,则切换后的控制台监测将不会再次生效,对于 SPA 你可以在路由卫士处重新注册本实例,其他情况请引导至真正的其他页面。

重写
var div = document.createElement('div')
div.innerHTML = '不要偷看啦~'

ConsoleBan.init({
  // 重写 body 为字符串
  write: '<h1> 不要偷看啦~ </h1>',
  // 可传入节点对象
  write: div
})

重写策略可以完全阻断对网站内容的审查,但较不友好,不推荐使用。

回调函数
ConsoleBan.init({
  callback: () => {
    // ...
  }
})

回调函数支持自定义打开控制台后的策略。

参数
namerequiredtypedefaultdescription
clearnobooleantrue禁用 console.clear 函数
debugnobooleantrue是否开启定时 debugger 反爬虫审查
debugTimenonumber3000定时 debugger 时间间隔(毫秒)
redirectnostring-开启控制台后重定向地址
writenostring 或Element-开启控制台后重写 document.body 内容,支持传入节点或字符串
callbacknoFunction-开启控制台后的回调函数
bfcachenobooleantrue禁用 bfcache 功能

注:redirectwritecallback 三种策略只能取其一,优先使用回调函数。

参考文章

禁止别人调试自己的前端页面代码

前端防止恶意调试

禁止调试,阻止浏览器F12开发者工具

前端防止调试技术

结语

需要注意的是,这些技术可以增加攻击者分析和调试代码的难度,但无法完全阻止恶意调试。因此,对于一些敏感信息或关键逻辑,最好的方式是在后端进行处理,而不是完全依赖前端来保护。

下篇文章主要介绍如何破解这些禁止调试的方法。

矛与盾:⚔️不让我在控制台上调试,哼,休想🛠️

原文链接:https://juejin.cn/post/7368313344712179739

作者:Aplee

Node 社群

 
 

我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。

5168af3ccdf028373acf4d26c571a7ae.png

“分享、点赞、在看” 支持一下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在VS Code中调试前端代码连接后端,你按照以下步骤: 1. 确保后端服务器正在运行:首先,保你的后端服务器正在运并监听正确的端口。你可以在终端或命令提示符中运行后端代码,并保没有错误或异常。 2. 配置前代码:在前端代码中,你需要确保正确配置了与后端通信的请求地址和端口。通常,你可以在前端代码的配置文件中找到这些设置。请确保它们与后端服务器的地址和端口匹配。 3. 打开VS Code调试:在VS Code中打开前端代码项目,并点击左侧的调试图标(或使用快捷键F5)打开调试面板。 4. 配置调试任务:在调试面板中,点击齿轮图标打开"launch.json"文件,这是用于配置调试任务的文件。 5. 添加调试配置:在"launch.json"文件中,你可以添加一个新的调试配置。对于前端与后端连接的调试,你可以选择"Chrome"或"Edge"作为调试器,并在"launch.json"文件中设置相应的配置。 6. 配置启动网址:确保在调试配置中设置了正确的启动网址,以便在调试时自动打开浏览器,并加载你的前端页面。 7. 启动调试:保存"launch.json"文件后,点击调试面板中的绿色播放按钮开始调试。这将启动浏览器,并在调试器中暂停在你设置的断点处。 通过以上步骤,你就可以在VS Code中调试前端代码连接后端了。在断点处,你可以检查变量、观察程序执行流程,并进行其他调试操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值