Vue项目前端代码防止被调试

项目背景

被安全测试针对了,总是调试我这不太安全的代码。前端代码深度混淆转成十六进制还不行,仍然找到加密方法,对后端数据进行解密。这次就修改了思路换种方法: 

我承认阁下很强,但假如, 我是说假如打开控制台是空白页面,阁下又该如何应对呢?

解决办法

前端代码防止被调试,无非就是打开控制台,卡住页面不让他往下走。有以下几种办法

1、打开控制台,无限debugger

2、打开控制台,无限加载

3、打开控制台,重定向到新的页面

网上有类似的插件可以使用,推荐两个 disable-devtool、console-ban,我这就是用console-ban内部的js文件做的。

console-ban.min.js

将这个文件放到public文件夹下,然后再index.html文件里引用

/*!* console-ban v5.0.0* (c) 2020-2023 fz6m* Released under the MIT License.*/
!(function (e, t) {typeof exports == 'object' && typeof module != 'undefined'? t(exports): typeof define == 'function' && define.amd? define(['exports'], t): t(((e = typeof globalThis != 'undefined' ? globalThis : e || self).ConsoleBan = {}))
})(this, function (e) {'use strict'var t = function () {return ((t =Object.assign ||function (e) {for (var t, n = 1, i = arguments.length; n < i; n++) {for (var o in (t = arguments[n])) {Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o])}}return e}),t.apply(this, arguments))}var n = { clear: !0, debug: !0, debugTime: 3e3, bfcache: !0 }var i = 2var o = function (e) {return ~navigator.userAgent.toLowerCase().indexOf(e)}var r = function (e, t) {t !== i ? (location.href = e) : location.replace(e)}var c = 0var a = 0var f = function (e) {var t = 0var n = 1 << c++return function () {;(!a || a & n) && ++t === 2 && ((a |= n), e(), (t = 1))}}var s = function (e) {var t = /./t.toString = f(e)var n = function () {return t}n.toString = f(e)var i = new Date();(i.toString = f(e)), console.log('%c', n, n(), i)var ovar rvar c = f(e);(o = c),(r = new Error()),Object.defineProperty(r, 'message', {get: function () {o()}}),console.log(r)}var u = (function () {function e(e) {var i = t(t({}, n), e)var o = i.clearvar r = i.debugvar c = i.debugTimevar a = i.callbackvar f = i.redirectvar s = i.writevar u = i.bfcache;(this._debug = r),(this._debugTime = c),(this._clear = o),(this._bfcache = u),(this._callback = a),(this._redirect = f),(this._write = s)}return ((e.prototype.clear = function () {this._clear && (console.clear = function () {})}),(e.prototype.bfcache = function () {this._bfcache &&(window.addEventListener('unload', function () {}),window.addEventListener('beforeunload', function () {}))}),(e.prototype.debug = function () {if (this._debug) {var e = new Function('debugger')setInterval(e, this._debugTime)}}),(e.prototype.redirect = function (e) {var t = this._redirectif (t) {if (t.indexOf('http') !== 0) {var nvar i = location.pathname + location.searchif (((n = t) ? (n[0] !== '/' ? '/'.concat(n) : n) : '/') !== i) r(t, e)} else location.href !== t && r(t, e)}}),(e.prototype.callback = function () {if ((this._callback || this._redirect || this._write) && window) {var evar t = this.fire.bind(this)var n = window.chrome || o('chrome')var r = o('firefox')if (!n) {return r? (((e = /./).toString = t), void console.log(e)): void (function (e) {var t = new Image()Object.defineProperty(t, 'id', {get: function () {e(i)}}),console.log(t)})(t)}s(t)}}),(e.prototype.write = function () {var e = this._writee && (document.body.innerHTML = typeof e == 'string' ? e : e.innerHTML)}),(e.prototype.fire = function (e) {this._callback? this._callback.call(null): (this.redirect(e), this._redirect || this.write())}),(e.prototype.prepare = function () {this.clear(), this.bfcache(), this.debug()}),(e.prototype.ban = function () {this.prepare(), this.callback()}),e)})()e.init = function (e) {new u(e).ban()}
})

Vue2.6、vue-cli5.0、webpack5

index.html

在index.html内部引入console-ban.min.js

index.html和console-ban.min.js都是同一个public文件夹下

<script src="console-ban.min.js"></script><% if (process.env.NODE_ENV === 'production' ) { %><script>ConsoleBan.init({redirect: 'about:blank'})</script>
<% } %>

Vue3.2、vite.4.4.8

vite不能使用process.env,如果要使用的话,需要引入外部插件 vite-plugin-html-env

.env.development

VITE_APP_NODE_ENV=development

.env.production

VITE_APP_NODE_ENV=production

.env.sit

VITE_APP_NODE_ENV=sit

vite-plugin-html-env

pnpm add vite-plugin-html-env -D

vite.config.js

import VitePluginHtmlEnv from 'vite-plugin-html-env'plugins: [VitePluginHtmlEnv(),VitePluginHtmlEnv({compiler: true}),
]

index.html

这个时候index.html已经移到根目录下去了,所以需要稍微改一下

<script src="/console-ban.min.js"></script><script type="text/javascript" vite-if="<{ VITE_APP_NODE_ENV }> === development">ConsoleBan.init({redirect: 'about:blank'})</script>

 效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/84139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSCP系列靶场-Esay-Gaara保姆级

OSCP系列靶场-Esay-Gaara 目录 OSCP系列靶场-Esay-Gaara总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试22-SSH端口的信息收集22-SSH端口版本信息与MSF利用22-SSH协议支持的登录方式22-SSH弱口令爆破(待定)22-SSH手动登录尝试(无) 80-HT…

“三高”论文完美复现!基于PSO-VMD-MCKD方法的风机轴承微弱故障诊断,实现早期微弱故障诊断,MATLAB代码实现...

声明&#xff1a;对于作者的原创代码&#xff0c;禁止转售倒卖&#xff0c;违者必究&#xff01; 本期文章思路来自振动测试与诊断期刊的一篇三高论文&#xff0c;点击链接可跳转。https://mp.weixin.qq.com/s/hmmDj5IwpaozeL4F0iI-2g 文章摘要如下&#xff1a; 针对风机滚动轴…

在qml中将一个16进制表示的颜色加上透明度

在qml中&#xff0c;我们在指定控件的颜色时&#xff0c;可以直接通过16进制的字符串来表示&#xff0c;比如"#ff0000"; 这种方式也比较符合UI设计人员的使用习惯。 但是假如要在此颜色的基础上&#xff0c;加个透明度的话&#xff0c;就要重新计算一番&#xff0c;比…

【iOS逆向与安全】插件开发之某音App直播间自动发666

1.目标 由于看直播的时候主播叫我发 666&#xff0c;支持他&#xff0c;我肯定支持他呀&#xff0c;就一直发&#xff0c;可是后来发现太浪费时间了&#xff0c;能不能做一个直播间自动发 666 呢&#xff1f;于是就花了几分钟做了一个。 2.操作环境 越狱iPhone一台 frida ma…

c++ 纯虚函数、抽象类

一、 纯虚函数 抽象类 只要有一个纯虚函数&#xff0c;这个类称为抽象类 抽象类的特点 1、无法实例化 2、抽象类的子类&#xff0c;必须要重写父类中的纯虚函数&#xff0c;否者也属于抽象类 例子一 #include <iostream> #include <string.h> using namespa…

tensorflow cuda gpu 安装

Windows 安装 CUDA/cuDNN 需要注意的是一定要选择 TensorFlow 和 CUDA相匹配&#xff0c;还需要查看下自己GPU的驱动版本&#xff0c;如果不匹配会出现很多问题。GPU驱动的版本可在 NVIDIA控制面板里找到&#xff1a; CUDA个版本与驱动的关系如下&#xff1a; GPU版本的 Tensor…

Laravel框架 - IOC容器详解

IOC 容器代码 好了&#xff0c;说了这么多&#xff0c;下面要上一段容器的代码了. 下面这段代码不是laravel 的源码&#xff0c; 而是来自一本书《laravel 框架关键技术解析》. 这段代码很好的还原了laravel 的服务容器的核心思想. 代码有点长&#xff0c; 小伙伴们要耐心看. …

JMeter断言之JSON断言

JSON断言 若服务器返回的Response Body为JSON格式的数据&#xff0c;使用JSON断言来判断测试结果是较好的选择。 首先需要根据JSON Path从返回的JSON数据中提取需要判断的实际结果&#xff0c;再设置预期结果&#xff0c;两者进行比较得出断言结果。 下面首先介绍JSON与JSON…

【深度学习】LeNet网络架构

文章目录 什么是LeNet代码实现网络架构 什么是LeNet LeNet是一种经典的卷积神经网络&#xff0c;由Yann LeCun等人在1998年提出。它是深度学习中第一个成功应用于手写数字识别的卷积神经网络&#xff0c;并且被认为是现代卷积神经网络的基础。 LeNet模型包含了多个卷积层和池…

Spark

Apache Spark是一种快速、通用、可扩展的大数据处理引擎&#xff0c;旨在处理大规模数据集并进行高效的数据分析。与Hadoop MapReduce相比&#xff0c;Spark具有更高的性能和更丰富的功能&#xff0c;可以处理更复杂的数据处理任务。以下是Apache Spark的一些基本概念&#xff…

idea2023+springboot 热部署配置

pom 中配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>idea

蓝桥杯每日一题2023.9.21

蓝桥杯2021年第十二届省赛真题-异或数列 - C语言网 (dotcpp.com) 题目描述 Alice 和 Bob 正在玩一个异或数列的游戏。初始时&#xff0c;Alice 和 Bob 分别有一个整数 a 和 b&#xff0c;有一个给定的长度为 n 的公共数列 X1, X2, , Xn。 Alice 和 Bob 轮流操作&#xff0…

Rsync学习笔记2

Rsync&#xff1a; 增量操作&#xff1a; 1&#xff09; server01服务文件变动。 [rootserver03 tp5shop]# rsync -av /usr/local/nginx/html/tp5shop root192.168.17.109:/usr/local/nginx/html/ sending incremental file listsent 88,134 bytes received 496 bytes 177,…

如何评估测试用例的优先级?

评估测试用例的优先级&#xff0c;有助于我们及早发现和解决可能对系统稳定性和功能完整性产生重大影响的问题&#xff0c;助于提高测试质量&#xff0c;提高用户满意度。 如果没有做好测试用例的优先级评估&#xff0c;往往容易造成对系统关键功能和高风险场景测试的忽略&…

黑马JVM总结(十八)

&#xff08;1&#xff09;G1_FullGC的概念辨析 SerialGC&#xff1a;串行的&#xff0c;ParallelGC&#xff1a;并行的 &#xff0c;CMS和G1都是并发的 这几种垃圾回收器的新生代回收机制时相同的&#xff0c;SerialGC和ParalledGC&#xff1a;老年代内存不足触发的叫FullGC…

zabbix自定义监控、钉钉、邮箱报警 (五十六)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、实验准备 二、安装 三、添加监控对象 四、添加自定义监控项 五、监控mariadb 1、添加模版查看要求 2、安装mariadb、创建用户 3、创建用户文件 4、修改监控模版 5、…

Vue2的学习

computed计算属性 概念 基于现有数据&#xff0c;计算出来的新属性&#xff0c;依赖的数据变化&#xff0c;会自动重新计算 语法 声明在computed配置项中&#xff0c;一个计算属性对应一个函数这是一个属性{{计算属性名}}&#xff0c;不是方法注意不要忘记return <body…

uniapp开发h5,解决项目启动时,Network: unavailable问题

网上搜了很多&#xff0c;发现都说是要禁用掉电脑多余的网卡&#xff0c;这方法我试了没有好&#xff0c;不晓得为啥子&#xff0c;之后在网上看&#xff0c;uniapp的devServer vue2的话对标的就是webpack4的devserver&#xff08;除了复杂的函数配置项&#xff09;&#xff0c…

持有NPDP证书是否可以进入高薪行业?

对于NPDP&#xff0c;一部分人考完PMP&#xff0c;想要继续提升自己的职场竞争力&#xff0c;一部分人是想直接考NPDP&#xff0c;但不确定它是否真的可以帮助到自己的职业发展&#xff0c;还处于一个犹豫踌躇的状态&#xff0c;那么我就来详细的介绍下NPDP考试的相关讯息&…

HTML5+CSS3+JS小实例:鼠标控制飞机的飞行方向

实例:鼠标控制飞机的飞行方向 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conten…