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

这篇具有很好参考价值的文章主要介绍了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 = 2
    var o = function (e) {
        return ~navigator.userAgent.toLowerCase().indexOf(e)
    }
    var r = function (e, t) {
        t !== i ? (location.href = e) : location.replace(e)
    }
    var c = 0
    var a = 0
    var f = function (e) {
        var t = 0
        var 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 o
        var r
        var 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.clear
            var r = i.debug
            var c = i.debugTime
            var a = i.callback
            var f = i.redirect
            var s = i.write
            var 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._redirect
                if (t) {
                    if (t.indexOf('http') !== 0) {
                        var n
                        var i = location.pathname + location.search
                        if (((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 e
                    var 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._write
                e && (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>

 效果

vue3 console-ban防调试,vue,基础知识,前端文章来源地址https://www.toymoban.com/news/detail-823279.html

到了这里,关于Vue项目前端代码防止被调试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端常用 Vue3 项目组件大全

    Vue.js 是一种流行的 JavaScript 前端框架,它简化了构建交互式的用户界面的过程。Vue3 是 Vue.js 的最新版本,引入了许多新的特性和改进。在 Vue3 中,组件是构建应用程序的核心部分,它们可以重用、组合和嵌套。下面是一些前端开发中常用的 Vue3 项目组件。 1、Vue Router: Vue

    2024年02月10日
    浏览(55)
  • 你可能从未使用过的调试 Vue3 (开源项目) 源码的方式

        1. 前言 大家好,我是若川。我倾力持续组织了一年多源码共读,感兴趣的可以加我微信 lxchuan12 参与。另外,想学源码,极力推荐关注我写的专栏《学习源码整体架构系列》,目前是掘金关注人数(4.7k+人)第一的专栏,写有20余篇源码文章。 看一个开源仓库,第一步一

    2024年02月04日
    浏览(42)
  • 1、前端项目初始化(vue3)

    安装npm,(可以用nvm管理npm版本)npm安装需要安装node.js(绑定销售?)而使用nvm就可以很方便的下载不同版本的node,这里是常用命令 配置npm源 命令: 设置镜像源: npm config set registry https://registry.npm.taobao.org 查看当前使用的镜像地址: npm config get registry 参考 :https://www.cnbl

    2024年01月20日
    浏览(53)
  • Vite + Vue3 实现前端项目工程化

    Vue3 发布至今,周边的生态、技术方案已足够成熟,个人认为新项目是时候切换到 Vite + Vue3 了。今天就给大家操作一下这种技术方案实现前端工程化。 数字化管理平台 Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus Vue权限系统案例 个人博客 通过官方脚手架初始化项目 第一种方式,这是使

    2024年02月03日
    浏览(74)
  • 部署若依前端vue3后端SSM项目实战

    前端部署在nginx 后端部署在tomcat 系统 前端服务器 后端服务器 前端项目架构 后端项目架构 win10 nginx1.22.1 tomcat9 vue3 ssm linux 亲测! 环境同样适用。 前端项目修改项目下载地址 GIThub RuoYi-Vue3 vite.config.js 基本不用动, 默认打包为文件夹名 dist , 不用dist可以自定义(我用的自定义) 前

    2024年04月09日
    浏览(42)
  • 一套高效使用的 Vue3 + Springboot 前端低代码框架

    JNPF低代码平台在提供 无代码(可视化建模)和低代码(高度可扩展的集成工具以支持跨功能团队协同工作) 开发工具上是独一无二的。支持简单、快速地构建及不断改进Web端应用程序,可为整个应用程序的生命周期提供全面、集成的工具集。 通过该平台的协作和可视化开发

    2024年02月20日
    浏览(41)
  • 基于vscode开发vue3项目的详细步骤教程 3 前端路由vue-router

    1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 4、基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAwesome_水w的

    2024年02月02日
    浏览(71)
  • 黑马程序员前端 Vue3 小兔鲜电商项目——(二)初始化项目

    Vue3是Vue.js最新的主要版本,它已经于2020年9月18日发布。它提供了许多新功能和性能改进,这些改进使得Vue更易于使用和更具可扩展性。 以下是Vue3的一些主要特性: 更快的渲染:Vue3使用重写的响应式系统,它使用Proxy对象来解决Vue2中的性能瓶颈问题。这使得Vue3的渲染速度比

    2024年02月11日
    浏览(44)
  • 黑马程序员前端 Vue3 小兔鲜电商项目——(一)初始化项目

    Vue3是Vue.js最新的主要版本,它已经于2020年9月18日发布。它提供了许多新功能和性能改进,这些改进使得Vue更易于使用和更具可扩展性。 以下是Vue3的一些主要特性: 更快的渲染:Vue3使用重写的响应式系统,它使用Proxy对象来解决Vue2中的性能瓶颈问题。这使得Vue3的渲染速度比

    2024年02月15日
    浏览(82)
  • vue3项目 - Eslint 配置代码风格

    总结: Prettier   (代码规范的插件,格式化 )--- 美观 Eslint   (规范、纠错、检验错误 )----- 纠错 首先, 禁用 Prettier 插件,安装 ESLint 插件,配置保存时自动修复 再 配置代码风格文件 .eslintrc.cjs (Prettier 配置 + ESLint 配置, 附配置代码 ) 配置内容 如, Prettier:单引号、

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包