您当前的位置:首页 > 电脑百科 > 程序开发 > 前端

一行代码禁止用户调试前端代码!

时间:2023-09-12 15:04:56  来源:微信公众号  作者:前端充电宝

有时候不希望用户去调试或复制前端代码,那该如何禁止用户调试前端代码呢?今天就来分享一个开源的前端工具:Disable Devtool,一行代码禁用 Web 开发者工具!

功能简介

disable-devtool 可以禁用一切可以进入开发者工具的方法,阻止通过开发者工具进行的“代码抓取”。

它具有以下特点:

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

  • 取消 f12 和 ctrl+shift+i 等快捷键

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

  • 开发者可以绕过拒绝(url参数使用tk配合md5加密)

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

  • 高度可配置、使用极简、体积紧凑

  • 支持npm引用和脚本标签引用(属性配置)

  • 识别真移动端与浏览器开发者工具设置插件格式化的移动端,为移动端节省性能

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

  • 支持可配置是否取消选择、复制、剪切、粘贴功能

  • 支持识别eruda和vconsole调试工具

  • 支持挂起和恢复支架工作

  • 支持配置ignore属性,默认自定义控制是否启用

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

基本使用

推荐使用 npm 进行安装(使用script脚本会被代理单独拦截掉从而无法执行),安装 disable-devtool:


 
 
npm i disable-devtool

基本使用:


 
 
import DisableDevtool from 'disable-devtool';

DisableDevtool(options);

这里的 options 就是配置项。可配置参数如下:


 
 
interface IConfig {
md5?: string; // 绕过禁用的md5值,详情见3.2,默认不启用绕过禁用
url?: string; // 关闭页面失败时的跳转页面,默认值为localhost
tkName?: string; // 绕过禁用时的url参数名称,默认为 ddtk
ondevtoolopen?(type: DetectorType, next: Function): void; // 开发者面板打开的回调,启用时url参数无效,type 为监测模式,详见3.5, next函数是关闭当前窗口
ondevtoolclose?(): void; // 开发者面板关闭的回调
interval?: number; // 定时器的时间间隔 默认200ms
disableMenu?: boolean; // 是否禁用右键菜单 默认为true
stopIntervalTime?: number; // 在移动端时取消监视的等待时长
clearIntervalWhenDevOpenTrigger?: boolean; // 是否在触发之后停止监控 默认为false, 在使用ondevtoolclose时该参数无效
detectors?: Array<DetectorType>; // 启用的检测器 检测器详情见 3.5 默认为全部,建议使用全部
clearLog?: boolean; // 是否每次都清除log
disableSelect?: boolean; // 是否禁用选择文本 默认为false
disableCopy?: boolean; // 是否禁用复制 默认为false
disableCut?: boolean; // 是否禁用剪切 默认为false
disablePaste: boolean; // 是否禁用粘贴 默认为false
ignore?: (string|RegExp)[] | null | (()=>boolean); // 某些情况忽略禁用
disableIframeParents?: boolean; // iframe中是否禁用所有父窗口
timeOutUrl?: // 关闭页面超时跳转的url;
}

DisableDevtool 的返回值类型如下:


 
 
interface IDDResult {
success: boolean; // 表示是否正常启用
reason: string; // 未正常启用的原因
}

Disable-Devtool 有以下监测模式,使用 detectors 定义:


 
 
enum DetectorType {
Unknown = -1,
RegToString = 0, // 根据正则检测
DefineId, // 根据dom id检测
Size, // 根据窗口尺寸检测
DateToString, // 根据Date.toString 检测
FuncToString, // 根据Function.toString 检测
Debugger, // 根据断点检测,仅在IOS chrome 真机情况下有效
Performance, // 根据log大数据性能检测
DebugLib, // 检测第三方调试工具 eruda 和 vconsole
};

ondevtoolopen 事件的回调参数就是被触发的监测模式。可以在 ondevtoolopen 里执行业务逻辑,比如做数据上报、用户行为分析等:


 
 
DisableDevtool({
ondevtoolopen(type, next){
alert('Devtool opened with type:' + type);
next();
}
});

那么问题来了,如果把 Devtools 禁用了,那如果线上应用出了问题,作为应用的开发者,也是无法调试的,怎么办呢?该工具的作者当然想到了这一点,它使用 key 与 md5 配合的方式使开发者可以在线上绕过禁用

使用流程:指定一个 key a(该值不要记录在代码中),使用 md5 加密得到一个值 b,将 b 作为 md5 参数传入,开发者在访问 url 的时候只需要带上url参数 ?ddtk=a即可绕过禁用。

disableDevtool对象暴露了 md5 方法,可供开发者加密时使用:


 
 
DisableDevtool.md5('xxx');

 



Tags:代码   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
有时候不希望用户去调试或复制前端代码,那该如何禁止用户调试前端代码呢?今天就来分享一个开源的前端工具:Disable Devtool,一行代码禁用 Web 开发者工具!功能简介disable-devtoo...【详细内容】
2023-09-12  Tags: 代码  点击:(0)  评论:(0)  加入收藏
译者 | 刘汪洋反馈就像一块牛排 - 如果太生,没有人喜欢;但如果过熟,难以下咽。(ChatGPT)通过不断审查他人代码,你不仅可以提升自己的技能,对你的职业发展也有很大好处。不仅可以...【详细内容】
2023-09-11  Tags: 代码  点击:(2)  评论:(0)  加入收藏
在现代软件开发中,团队合作是不可或缺的一部分。为了确保代码质量、减少错误以及促进知识共享,代码审查和合并请求成为了开发团队中的关键实践。在本文中,我们将深入探讨代码审...【详细内容】
2023-09-09  Tags: 代码  点击:(7)  评论:(0)  加入收藏
译者 | 布加迪审校 | 重楼代码开发的前景再诱人不过了。谁不想减少工作量?谁不想靠在座椅上,让机器收拾残局?毕竟,几十年来我们一直在告诉机器该怎么做。它们现在应该已经会做一...【详细内容】
2023-09-06  Tags: 代码  点击:(16)  评论:(0)  加入收藏
作者:上海交通大学 APEX 实验室“Write the code. Change the world.”If computers can write code, then it is a new world.打造能自己写代码的机器,这是计算机科学和人工...【详细内容】
2023-09-06  Tags: 代码  点击:(9)  评论:(0)  加入收藏
新智元报道编辑:LRS【新智元导读】代码能否跑起来的不是判断可靠性的标准,用语言模型写代码还需要考虑生产环境下的预期外输入。大型语言模型(LLM)在理解自然语言和生成程序代码...【详细内容】
2023-09-05  Tags: 代码  点击:(21)  评论:(0)  加入收藏
分支命名master 分支master 为主分支,也是用于部署生产环境的分支,需要确保master分支稳定性。master 分支一般由 release 以及 hotfix 分支合并,任何时间都不能直接修改代码。...【详细内容】
2023-09-04  Tags: 代码  点击:(22)  评论:(0)  加入收藏
北京证券交易所新一轮改革揭开帷幕。9月1日晚,证监会发布了被称为“北交所深改19条”的《关于高质量建设北京证券交易所的意见》,从加快高质量上市公司供给、推进市场改革创新...【详细内容】
2023-09-04  Tags: 代码  点击:(14)  评论:(0)  加入收藏
嘿! 今天,我有一些特别的东西要与大家分享 - 60 个 C# 代码片段的汇编,我发现它们对我自己的工作非常有帮助。在本文中,我们不仅要了解这些片段如何解决日常编程问题,还要了解它...【详细内容】
2023-09-01  Tags: 代码  点击:(38)  评论:(0)  加入收藏
作者丨Peter Wayner编译丨诺亚低代码一直在争议中向前发展。作为一种软件开发模式,它有非常迷人的一面,通过简单的“拖、拉、拽”即可快速搭建软件,极大地减少了工作量,提升了开...【详细内容】
2023-09-01  Tags: 代码  点击:(30)  评论:(0)  加入收藏
▌简易百科推荐
有时候不希望用户去调试或复制前端代码,那该如何禁止用户调试前端代码呢?今天就来分享一个开源的前端工具:Disable Devtool,一行代码禁用 Web 开发者工具!功能简介disable-devtoo...【详细内容】
2023-09-12  前端充电宝  微信公众号  Tags:代码   点击:(0)  评论:(0)  加入收藏
什么是Vue?Vue[1] 是一个用于构建用户界面的渐进式、可逐步采用的 JavaScript 框架。它由 Evan You[2] 于 2014 年创建,并由一个活跃的开发者社区负责维护。Vue 设计得非常轻...【详细内容】
2023-09-11  前端F2E  微信公众号  Tags:Vue   点击:(2)  评论:(0)  加入收藏
说起模块化开发大家想必都不陌生,特别是随着前端应用复杂化,代码呈倍数增长,我们不得不耗费大量的时间去进行管理,模块化也就逐渐的被大家所接受。所以具体来讲的话,模块化开发就...【详细内容】
2023-09-06  Onegun    Tags:模块   点击:(13)  评论:(0)  加入收藏
迭代器和生成器是 ES6 中引入的特性。迭代器通过一次消费一个项目列表来提高效率,类似于数据流。生成器是一种能够暂停执行的特殊函数。调用生成器允许以块的形式(一次一个)生...【详细内容】
2023-09-02  前端充电宝  微信公众号  Tags:前端   点击:(3)  评论:(0)  加入收藏
在这篇文章中,我将介绍如何在 Node.js 中使用模块,重点是如何导出和消费它们。各种模块格式由于 JavaScript 最初没有模块的概念,因此随着时间的推移,出现了各种相互竞争的格式...【详细内容】
2023-08-28   前端F2E    Tags:module   点击:(2)  评论:(0)  加入收藏
一、JS库JS库(JavaScript Library)是一组封装了常用功能和工具的JavaScript代码集合。它们提供了一系列的函数和方法,使得开发者能够更便捷地进行常见的操作和处理。JS库通常是...【详细内容】
2023-08-27  贝格前端工场    Tags:js库   点击:(27)  评论:(0)  加入收藏
值得一提的是,本篇文章是对 ROBIN WIERUCH 发表的《 10 Web Development Trends in 2023 》的文章的翻译,但是对部分内容进行了补充和修改,不喜勿喷。关于文章内部提到的诸多...【详细内容】
2023-08-25  高级前端进阶  今日头条  Tags:前端   点击:(26)  评论:(0)  加入收藏
SSE(Server-Send Events)SSE 是一种在基于浏览器的 Web 应用程序中仅从服务器向客户端发送文本消息的技术。SSE基于 HTTP 协议中的持久连接, 具有由 W3C 标准化的网络协议和 Ev...【详细内容】
2023-08-24  碧树西风    Tags:前端   点击:(16)  评论:(0)  加入收藏
构建现代大规模应用程序最具挑战性的方面之一是数据获取。加载和错误状态、分页、过滤、排序、缓存等许多功能可能会增加复杂性,并经常使应用程序充满大量的样板代码。这就是...【详细内容】
2023-08-22  大智视野  今日头条  Tags:Vue   点击:(13)  评论:(0)  加入收藏
Webpack 的第一次发布是在 2013 年发布,长久以来是主流的前端打包工具。Vite 的第一次发布是在 2021 年,是近两年来前端打包工具中的后起之秀,重点解决 Webpack 在开发阶段的...【详细内容】
2023-08-21  架构思考    Tags:Vite   点击:(23)  评论:(0)  加入收藏
站内最新
站内热门
站内头条