浏览器之禁止打开控制台【F12】

news2025/6/1 22:43:54

前言

在有时我们的日常开发工作中,有些项目要求我们增加禁用控制台的要求,这种虽然很鸡肋,但是它确实存在,并且会让哈哈心里觉得很有成就感。
所以今天他来了。

文章目录

    • 前言
    • 无限debugger
      • 实现思路:
      • 效果如下:
      • 具体开发如下所示:
    • 监听键盘事件
    • 禁用右键菜单
    • 监听窗口大小变化
    • 使用第三方库‌
    • 后端验证‌
    • 总结
    • 参考资源

无限debugger

实现思路:

  • 打开控制台时,因为debugger原因阻断。
  • 通过定时器无限调用生成debugger,使得页面一直处于断点中;
  • 增加时效,超过时间点击跳转空白标签页。

效果如下:

在这里插入图片描述

具体开发如下所示:

  • 封装工具函数

我们可以在函数的调用过程中增加自己需要的业务代码,比如角色白名单,路由白名单等。

// 禁用浏览器debugger
export const disableDebugger = function () {
  const obj = Object.create(null);
  // 记录当前时间
  let t = Date.now();
  // 监听对象属性的获取
  Object.defineProperty(obj, "is_debugger", {
    get: () => {
      if (Date.now() - t > 50) {
        location.replace("about:blank");
      }
    },
  });
  if (window.timer) {
    clearInterval(window.timer);
  }

  window.timer = setInterval(() => {
    t = Date.now();
    (function debug() { })["constructor"]("debugger")();
    // 触发跳转
    console.log(obj.is_debugger);
  }, 100);
};
  • 方法调用

在vue项目中,main.js 或者 app.vue 中直接调用,这样会在整个项目页面都可以实现debugger效果。
在这里插入图片描述
在更多项目中,我更多的加在路由拦截器中,这样可以方便一些页面的调试。

监听键盘事件

通过JavaScript监听键盘的特定按键组合,如F12、Ctrl+Shift+I等,这些组合键通常用于打开浏览器的开发者工具。当检测到这些按键被按下时,阻止其默认行为。

document.addEventListener("keydown", e => {
    if (e.keyCode === 123 || e.ctrlKey && e.shiftKey && e.keyCode === 67 || e.ctrlKey && e.shiftKey && e.keyCode === 73 || e.ctrlKey && e.keyCode === 85) {
        e.preventDefault();
    }
});

禁用右键菜单

通过监听contextmenu事件并阻止其默认行为,可以防止用户通过右键菜单中的选项来打开控制台

document.addEventListener("contextmenu", e => e.preventDefault());

监听窗口大小变化

通过监听resize事件,并检查浏览器窗口的外部宽度和内部宽度的差异,可以推测控制台是否被打开。

window.addEventListener('resize', function() {
 ...
});

使用第三方库‌

第三方库如【console-ban】https://www.npmjs.com/package/console-ban可以帮助你更容易地实现阻止打开控制台的功能。
在这里插入图片描述

后端验证‌

除了前端的方法外,还可以通过后端验证来增强安全性。例如,定期发送请求到服务器以检查用户行为,如果检测到异常行为(如频繁打开控制台),可以采取相应的措施‌

总结

单纯的使用哪种方式,应该都不能够完全阻止用户打开控制台进行代码的调试,结合起来,也只能说提高用户打开控制台调试的复杂程度。
更好的保护数据的安全,还是给数据加密,或者使用其他更为安全的技术手段更好一下,这种我觉得更有点形式主义,防技术差的,不防高的。哈哈

参考资源

  • 【百度AI】💯
  • 【console-ban】https://www.npmjs.com/package/console-ban

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

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

相关文章

GEARS以及与基础模型结合

理解基因扰动的反应是众多生物医学应用的核心。然而,可能的多基因扰动组合数量呈指数级增长,严重限制了实验探究的范围。在此,图增强基因激活与抑制模拟器(GEARS),将深度学习与基因-基因关系知识图谱相结合…

计算机网络 | 1.1 计算机网络概述思维导图

附大纲: 计算机网络的概念 一个通过通信设备与线路把不同计算机系统连接起来,实现资源共享和信息传递的系统 计算机网络的组成 从组成成分上 硬件:主机、通信链路、交换设备、通信处理机软件:网络操作系统、聊天软件等协议&…

最悉心的指导教程——阿里云创建ECS实例教程+Vue+Django前后端的服务器部署(通过宝塔面板)

各位看官老爷们,点击关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!! 阿里云创建ECS实例教程 注意: 阿里云有300元额度的免费适用期哟 白嫖~~~~ 注册了阿里云账户后&#x…

windows中Redis、MySQL 和 Elasticsearch启动并正确监听指定端口

Redis:在 localhost 上启动,并监听端口 6379 MySQL:在 localhost 上启动,并监听端口 3306 Elasticsearch:在 127.0.0.1 上启动,并监听端口 9300 1. Redis 确保 Redis 在 localhost 上启动并监听端口 6379…

学者观察 | Web3.0的技术革新与挑战——北京理工大学教授沈蒙

导语 沈蒙老师认为Web3.0正推动形成新型数据基础设施架构和数据要素流通机制,有望在数字经济时代发挥重要作用,对我国经济发展和社会进步将产生深远影响。AI在推动Web3.0发展方面具有巨大的潜力,但在隐私保护、公平性与安全性等方面也存在“…

pycharm终端遇不显示虚拟环境的问题

大部分我们用pycharm会配合我们的anaconda来使用,但是配置好后,可能会出现pycharm终端不显示虚拟环境的问题。 首先是确定不显示环境,下图中如果没有这个方框,就是不显示虚拟环境。此时用pip或者conda的命令是会提示不是 “不是内…

聊聊网络变压器的浪涌等级标准是怎样划分的呢?

Hqst盈盛(华强盛)电子导读:聊聊网络变压器的浪涌等级标准是怎样划分的呢? 在和做防雷产品的客户的深度沟通网络变压器产品选型中发现:客户对网络变压器的浪涌等级划分也很希望有更深的了解,今天就这个问题和…

2025年Google I/O大会上,谷歌展示了一系列旨在提升开发效率与Web体验的全新功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

ONLYOFFICE文档API:编辑器的品牌定制化

在当今数字化办公时代,文档编辑器已成为各类企业、组织和开发者不可或缺的工具之一。ONLYOFFICE 文档提供的功能丰富且强大的文档编辑 API,让开发者能够根据自己的产品需求和品牌特点,定制编辑器界面,实现品牌化展示,为…

HTTP/HTTPS与SOCKS5三大代理IP协议,如何选择最佳协议?

在复杂多变的网络环境中,代理协议的选择直接影响数据安全、访问效率和业务稳定性。HTTP、HTTPS和SOCKS5作为三大主流代理协议,各自针对不同场景提供独特的解决方案。本文将从协议特性、性能对比到选型策略,为您揭示如何根据业务需求精准匹配最…

远程调用 | OpenFeign+LoadBalanced的使用

目录 RestTemplate 注入 OpenFeign 服务 LoadBalanced 服务 LoadBalanced 注解 RestTemplate 注入 创建 配置类,这里配置后 就不用再重新new一个了,而是直接调用即可 import org.springframework.cloud.client.loadbalancer.LoadBalanced; import …

NSSCTF [NISACTF 2022]ezheap

2058.[NISACTF 2022]ezheap(堆溢出) [NISACTF 2022]ezheap 1.准备 2.ida分析 main函数 int __cdecl main(int argc, const char **argv, const char **envp) {char *command; // [esp8h] [ebp-10h]char *s; // [espCh] [ebp-Ch]setbuf(stdin, 0);setbuf(stdout, 0);s (cha…

【HarmonyOS Next之旅】DevEco Studio使用指南(二十七) -> 开发云函数

目录 1 -> 开发流程 2 -> 创建并配置函数 2.1 -> 创建函数 2.2 -> 配置函数 3 -> 开发函数 4 -> 调试函数 4.1 -> 前提条件 4.2 -> 通过本地调用方式调试函数 4.3 -> 通过远程调用方式调试函数 5 -> 部署函数 1 -> 开发流程 云函数…

Rust 学习笔记:闭包

Rust 学习笔记:闭包 Rust 学习笔记:闭包用闭包捕获环境闭包类型推断和注释捕获引用或移动所有权将捕获的值移出闭包和 Fn Traits Rust 学习笔记:闭包 Rust 的闭包是匿名函数,可以保存在变量中,也可以作为参数传递给其…

c# 获取电脑 分辨率 及 DPI 设置

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices;/// <summary> /// 这个可以 /// </summary> class Program {static void Main(){//设置DPI感知try{SetProcessDpiAwareness(…

低代码开发模式下的应用交付效率优化:拖拽式交互机制研究

低代码开发平台凭借其可视化操作、快速构建、灵活扩展等核心特性&#xff0c;正在成为推动企业数字化转型的重要工具。 拖拽式开发&#xff0c;降低技术门槛 &#xff1a;图形化界面与模块化组件&#xff0c;用户无需编写复杂代码&#xff0c;只需通过简单的拖拽即可完成应用搭…

STP配置

由于我们演示的是STP 但是华为交换机默认的都是MSTP所以要换到STP以下是方法 STP mode &#xff1f; 查看模式 STP mode stp 选择stp 换好了后配置交换机优先级 [SWA]stp priority 4096 Apr 15 2013 16:15:33-08:00 SWA DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5…

Linux操作系统 使用共享内存实现进程通信和同步

共享内存使用 //main.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include <sys/shm.h> #include <string.h> int main() {int shmidshmget((key_t)1234,256,IPC_CREAT|0600);assert(shmid!-1);…

如何优化微信小程序中渲染带有图片的列表(二进制流存储方式的图片存在本地数据库)

方法一&#xff1a;对列表的获取进行分页处理 实现方法&#xff1a; 前端请求&#xff08;需要向后端传两个参数&#xff0c;pageIndex是获取第几页是从0开始&#xff0c;pageSize是这一页需要获取多少个数据&#xff09; 后端接口实现&#xff08;因为这里是通过参数拼接请求…

尝鲜纯血鸿蒙,华为国际版本暂时不支持升级。如mateX6 国际版?为什么不支持?什么时候支持?

一&#xff1a;mateX6 国际版支持鸿蒙吗&#xff1f; 不支持 二&#xff1a;华为国际版支持鸿蒙吗&#xff1f; 不支持 三&#xff1a;华为国际版什么时候支持&#xff1f; 2025年预期可以支持。请耐心等待。 三&#xff1a;国际版为什么不支持&#xff1f; EMUI 采用AO…