javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > 禁止调试前端代码

禁止别人调试前端代码的几种常见方法

作者:C+ 安口木

这篇文章主要介绍了介绍了多种避免他人调试前端代码的方法,包括通过不断使用debugger语句、将代码写在一行、检测浏览器窗口尺寸变化、使用定时器执行debugger语句、使用第三方插件disable-devtooldisable-devtool、禁止F12/审查开启控制台等,需要的朋友可以参考下

前言

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

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

无限debugger

基础方案

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

浏览器宽高

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

(() => {
  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可以禁用所有一切可以进入开发者工具的方法,防止通过开发者工具进行的代码搬运。

该库有以下特性:

使用:

<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: () => {
    // ...
  }
})

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

总结 

到此这篇关于禁止别人调试前端代码的几种常见方法的文章就介绍到这了,更多相关禁止调试前端代码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文