JS禁止打开控制台

js禁止打开控制台调试代码 function loop() { window.requestAnimationFrame(function() { debugger; loop(); }) } loop() 阅读详情

主要为了通过禁止打开控制台,防止别人进行代码调试。


1、禁止右键查看源码和F12

//禁止F12键盘事件
document.addEventListener('keydown', function(event){
   return 123 != event.keyCode || (event.returnValue = false)
});
//禁止右键、选择、复制
document.addEventListener(‘'contextmenu'’, function(event){
   return event.returnValue = false
})

破解:还可以使用浏览器菜单中的开发者工具打开控制台

2、通过页面宽度变化监测控制台

浏览宽高变化监测主要是监测浏览器可视区域的宽高:window.innerWidth / window.innerHeight(滚动条和内容区)和浏览器宽高:window.outerWidth / window.outerHeight(inner的基础上加上工具条的宽高)之间的差值。

因为我们不知道浏览器是否开启了工具条及工具条的宽高,所以我们设置一个阈值如200,如果outer – inner 大于200,我们就认为开启了控制台。

function resize(){
    var threshold = 200;
    var widthThreshold = window.outerWidth - window.innerWidth > threshold;
    var heightThreshold = window.outerHeight - window.innerHeight > threshold;
    if(widthThreshold || heightThreshold){
        console.log('控制台打开了')
    }
}
window.addEventListener('resize', resize);
resize()

关于检测窗口大小,有人专门针对此写了个库:https://github.com/sindresorh...,感兴趣的可以去看一下。

破解:监测浏览器宽高变化的缺点是非常明显的,因为这种监测只能针对控制台内嵌的情形,但是很多浏览器都支持独立窗口式的控制台。

3、利用控制台特性改写对象toString

对于一些浏览器,如果控制台输出的是对象,则保留对象的引用,每次打开控制台的时候,如果对象类型是function、date等(以前还有regexp,现在已失效),都会重新调用一下对象的toString()方法,将返回结果打印到控制台上。

经过测试:
1)、先声明对象,再重写toString,最后打印对象,那么toString会在开始时多运行一次,所以可以使用一个计数器来判断哪次有效
2)、先声明对象,再打印对象,最后重写toString,那么如果初始化时控制台是开启状态,会检测不到这一次的状态
3)、先声明对象,再重写toString,最后打印对象,但是对象不作为第一个参数,此时就可以成功监测每一次控制台状态了
4)、console.log、console.info、console.error等均有效
5)、只在chrome内核浏览器有效,firefox、ie失效

var devtools = new Date(); //function(){};
devtools.toString = function() {
    console.log('控制台打开了');
    //或执行一段死循环
    window.open("about:blank", "_self"); 
}
console.log('', devtools);

破解:可通过标签注入js代码清空控制台(添加一个网页标签,标签网址为javascript:console.clear();,进入网页后,点击该标签页,就会运行里面的代码),如果是定时器执行上述代码,还需要重写清空console(javascript:console.clear();for(var k in console){if(typeof console[k] == 'function'){console[k] = function(){}}};)。

4、利用控制台特性进行监听dom属性

大部分浏览器在打印dom元素的时候,如果控制台处于关闭状态,不会获取元素属性,但是如果控制台处于开启状态,就会自动获取dom属性,从而触发监听事件

function observerConsole(){
    //这里使用dom元素,在打开控制台时才会计算id
    var dom = document.createElement("div")
    Object.defineProperty(dom, "id", {
        get: function(){
            console.log('控制台打开了')
        }
    })
    
    //ie不支持console.table
    //console.info(dom);
    console.log(dom);
}

除了使用console.log,我们还可以使用console.info,console.dir和console.error等等,需要注意的是ie不支持console.table

破解:通过标签注入js代码清空控制台,如果是定时器执行打印dom的操作,还需要重写清空console。

上述方法需要注意浏览器对于defineProperty的支持,另外在firefox浏览器失效,因为firefox浏览器对于对象中监听的属性不会取值,需要手动点开才会触发。所以对于firefox需要另辟蹊跷才行,这里我选择使用debugger语句来实现,debugger 语句调用任何可用的调试功能,可以阻断代码执行,如果没有调试功能可用,则此语句不起作用。所以我们可以在debugger前记录时间,如果debugger没有触发,运行几条语句的时间几乎为0,但是如果被触发,那间隔时间就不是几十、几百毫秒了。

function observerConsole(){
    var obj = Object.create(null), t = Date.now();
    Object.defineProperty(obj, "a", {
        get: function() {
            if(Date.now() - t > 100){
                console.log('控制台打开了')
            }
        }
    })
    setInterval(function(){
        t = Date.now();
        (function(){})["constructor"]("debugger")();//debugger;
        console.log(obj.a);
    }, 200)
}

缺点:如果浏览器取消了debugger调式,那么就毫无意义了。
chrome:


Firefox:

汇总3、4,可以做如下封装:

var observerConsole = {
    openCallback: function(){
        console.log('控制台打开了');
        try {
            window.open("about:blank", "_self")
        } catch(e) {
            var btn = document.createElement("button");
            btn.onclick = function() {
                window.open("about:blank", "_self")
            }
            btn.click()
        }
    },
    observer: function(){
        //这里使用dom元素,在打开控制台时才会计算id
        var dom = document.createElement("div"), that = this;
        Object.defineProperty(dom, "id", {
            get: function(){
                that.openCallback()
            }
        })
        //ie不支持console.table
        //console.info(dom);
        console.log(dom);
    },
    observerF: function(){
        var obj = Object.create(null), t = Date.now(), that = this;
        Object.defineProperty(obj, "a", {
            get: function() {
                if(Date.now() - t > 100){
                    that.openCallback()
                }
            }
        })
        setInterval(function(){
            t = Date.now();
            (function(){})["constructor"]("debugger")();//debugger;
            console.log(obj.a);
        }, 200)
    },
    init: function(){
        var t = window.navigator.userAgent.toLowerCase();
        t.indexOf("firefox") >= 0 ? this.observerF() : this.observer();
    }
}
ConsoleManager.init()

破解:通过标签注入js代码清空控制台、取消console.log等
反破解:对console.log等进行重写再包装,如

let _console = {
      log : console.log,
      info : console.info,
      warn : console.warn,
      error : console.error
};

然后使用_console.log等替换上面的console.log。这里可以使用闭包,防止别人对_console的再重写。

代码测试仅测试了firefox、ie、chrome浏览器及部分chrome内核浏览器(如360、qq浏览器、UC浏览器、搜狗浏览器)

5、利用debugger的特性,无限递归

这个方法不能监测控制台被打开,但是能达到不让别人浏览你代码的目的。

上面也说了:debugger 语句调用任何可用的调试功能,可以阻断代码执行,如果没有调试功能可用,则此语句不起作用。

另外:每个浏览器都有其最大调用栈,如果超出就会抛出Maximum call stack size exceeded的错误并终止程序。

利用上面讲的特性组合成下面的代码:

function check() {
    function doCheck(a) {
        (function() {}["constructor"]("debugger")()); //debugger
        doCheck(++a);
    }
    try {
        doCheck(0)
    } catch(err) {
        console.log(err)
    }
};

上面代码check运行时,如果控制台未开启,debugger 不会起作用,但是doCheck会不断循环,直至爆栈,抛出错误,中止本次check运行;如果控制台开启,则会不断的进行断点调试和循环doCheck的调用,直至爆栈;如果控制台开启,但是取消了debugger调式,虽然此时debugger 不会起作用,但递归是依然存在的,而且此时网页性能与未开启控制台相比会大幅度下降,严重的话,可能会卡死浏览器。

未开启控制台时代码运行时间:
Chrome:30-50ms
Firefox:200-400ms
Ie:10-30ms

开启控制台但取消debugger时代码运行时间:
Chrome:1000-2000ms
Firefox:页面直接卡死

从上面的测试结果来看,我们可以设置一个间隔2000ms的定时器来不断执行check,这样当控制台开启时,不论是否取消debugger调式,都会使页面卡住。另外我们还可以对代码进行混淆,增加阅读困难度,我们还可以利用闭包完成上面操作,防止别人在控制台重置check:

check=function(){}。

!function(){
    var _0x1cbb = ["tor", "struc", "call", "ger", "con", "bug", "de", "apply"];
    setInterval(check, 2e3);
    function check() {
        function doCheck(_0x1834ff) {
            if (('' + _0x1834ff / _0x1834ff)['length'] !== 0x1 || _0x1834ff % 0x14 === 0x0) {
                (function() {return !![]}[
                    _0x1cbb[0x4] + _0x1cbb[0x1] + _0x1cbb[0x0]
                ](
                    _0x1cbb[0x6] + _0x1cbb[0x5] + _0x1cbb[0x3]
                )[_0x1cbb[0x2]]());
            } else {
                (function() {return ![]}[
                    _0x1cbb[0x4] + _0x1cbb[0x1] + _0x1cbb[0x0]
                ](
                    _0x1cbb[0x6] + _0x1cbb[0x5] + _0x1cbb[0x3]
                )[_0x1cbb[0x7]]());
            }
            doCheck(++_0x1834ff);
        }
        try {
            doCheck(0)
        } catch(err) { }
    };
}();

优点:兼容性比较好,不易破解
缺点:会影像浏览器性能,造成页面卡顿
破解:想办法重置check函数

6、练手网站推荐

下面推荐几个网站,他们都用了上面讲的某种方法来禁止打开控制台,感兴趣的话可以研究下他们是怎么做到的,该如何破解(破解方法在上面已经给出了)。

以下网站推荐不具有针对性,如有冒犯,十分抱歉,可联系我进行删除

1、http://marsgis.cn/project/3d/...

2、https://z1.m1907.cn/

3、https://music.qugeek.com/page...

 

Open3D (C++)球旋转算法(BPA)三维建模 球旋转算法用于点云三维建模的C++代码实现。 阅读详情

相关推荐

SECS/GEM协议中的关键指令详解:从S1F1到S9F9的完整指南

本文详细解析了SECS/GEM协议中从S1F1到S9F9的关键指令,涵盖设备状态管理、控制诊断、报警处理等核心功能。通过实际案例和调试技巧,帮助开发者掌握半导体制造设备通信标准,解决SECS/GEM协议在实际工程应用中的通讯难题,提升生产线智能化水平。

weixin_26899659的博客 397

JS实现防止别人通过控制台调试网站

大家好哇,今天我们来谈谈浏览器控制台的那点事儿,作为一名程序员来说,肯定是不希望自己的代码被别人反复地调试,万一被别人调试出 bug 怎么办?被不怀好意的人获取接口信息恶意攻击怎么办?所以,这时候 JavaScript 防审查开启控制台就很有必要了~众所周知,要开启控制台,有三种方法,需要注意的是:前两种都是可以通过代码阻止的,但是最后一种打开控制台的方式是无法被阻止掉的。那么下面我们就从这个角度出发,好好了解一下这个过程~

winkexin的博客 2694

Linux下开机异常(fsck exited with status code 4)

Linux下开机异常事情是这样的,本来我呢跑着程序听着歌,结果忽然就死机了,我只能强制关机,再次打开系统的时候,就提示这样fsck from util-linux 2.26.2 /dev/sda10 contains a file system with errors, check forced. /dev/sda10: Inodes that were part of a corrupted pr

芳草碧连天 2万+

JS禁止打开控制台(鼠标右键)

【代码】JS禁止打开控制台(鼠标右键)

闪电⚡之王的博客简介 1392

IBM x3650M4服务器更换主板后,导入原有硬盘阵列信息

x3650m4服务器主板坏了,更换好的主板,需要导入原来硬盘的里面的阵列信息 1、开机有提示信息,按C导入配置 2、按Y继续 3、点击start进入阵列卡配置 4、选择configurations 1,点击preview 5、预览硬盘的阵列信息,点击import导入 6、导入成功,可以查看到阵列信息 7、重启服务器,进入操作系统 如果重启找不到操作系统,重启按f12,手动选择从onboard sas controller启动,进入系统一次后面重启就会自动找到并引导系统了。 8、有时候导入阵列

zds00virtue的博客 2万+

Windows 11 下 WSL 离线安装 Ubuntu 22.04 保姆级教程(国内镜像加速版)

本文提供了一份针对中国地区用户的Windows 11下WSL离线安装Ubuntu 22.04的详细教程。通过使用国内镜像源加速下载安装包,并配合PowerShell命令完成部署,有效解决了官方商店下载缓慢的问题。教程涵盖环境准备、离线包获取、安装初始化及安装后的关键优化配置,帮助用户快速搭建高效的Linux开发环境。

weixin_28452161的博客 1378

JS实现禁止打开控制台/禁止F12/禁止ctrl+shift+i/禁止鼠标右键

禁止打开控制台/前端禁止打开控制台方法/禁用F12/禁用右键/禁用ctrl+shift+i/禁止预先调试打开控制台/禁止控制台操作

gusensen的博客 1721

VSCode 配置 Claude Code 插件的 4 步安装法与 3 类常见报错解决方案

介绍 VSCode 中 Claude Code 插件的 4 步可靠安装流程与 3 类高频报错(上下文丢失、认证失败、加载卡死)的根因分析和精准修复方案,聚焦文件上下文捕获机制、请求头注入要求及缓存失效逻辑,提供可验证的命令行操作与日志定位方法。

weixin_28728443的博客 495

阻止用户打开控制台

实现 一、阻止打开 首先得知道用户能通过什么方式打开控制台,一个是通过键盘事件,一个是鼠标右键。 那就通过禁止键盘的f12事件: 漏洞:浏览器设置其他快捷键打开控制台,没了。 禁止右键事件: 识别打开 这时候问题来啦,有个聪明的小伙说那我先打开控制台,再进网站呢。 好问题,那就得让程序判断你有没有打开控制台: 通过浏览器宽高和可视宽高对比 这种是通过获取浏览器的可视区域宽高(整个浏览器)window.innerWidth / window.innerHeight和浏览器中项目显示的宽高(包括书签栏)wi

ZF的博客 4632

华为OD机试真题 新系统【小学英语老师批改作文】

华为OD机试 新系统真题【小学英语老师批改作文】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【小学英语老师批改作文】

qq_45776114的博客 922

快速入门必看!RT-DETR手把手训练自己的数据集去跑实验,基于 ultralytics 仓库源码改进,配置虚拟环境,准备数据集、训练、验证、推理测试 ,实现0到1的完整教学过程。

本文介绍了使用Ultralytics框架训练RT-DETR模型的全流程。首先需要创建Python 3.10虚拟环境,安装指定版本的PyTorch和相关依赖包。然后准备数据集,修改配置文件,并详细介绍训练、验证和推理三个核心步骤的代码实现。训练阶段使用RTDETR类加载模型配置,设置训练参数;验证阶段评估模型性能;推理阶段可对图片、视频等进行预测。文中还提供了清华大学镜像源加速下载,以及详细的参数配置说明,帮助用户快速搭建RT-DETR目标检测模型。

Ai缝合怪、助力小伙伴高效发论文 5548

js禁止打开控制台

js禁止用户打开控制台的操作。

Elizabeths的博客 471

交换机四种光互联技术:OIO、OBO、NPO与CPO

在过去几十年里,数据中心交换机主要依赖电信号通过铜线进行数据传输。然而,随着数据传输速率从100Gbps向400Gbps、800Gbps甚至1.6Tbps迈进,传统电互联(Electrical Input & Output, EIO)面临三大瓶颈:信号衰减、功耗激增和空间限制。例如,高速信号在长距离铜线传输中会产生严重的信号失真,迫使设计者加入数字信号处理器(DSP)来补偿信号衰减,这进一步推高了功耗和成本。此外,传统可插拔光模块的体积较大,限制了端口密度,难以满足现代数据中心对高带宽密度的需求。

网络技术联盟站 3128

JS禁止打开控制台博客收集

JS禁止打开控制台 | 优快云博主hfhan_872914334

weixin_42287935的博客 239

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JavaScript 实现禁止打开控制台(右键/工具栏/F12/Shift+Ctrl+I)

前两天分享的插件WP Content Copy Protection & No Right Click——深度保护您的网站内容有网友说可以把检查代码的功能给屏蔽了,经我个人测试发现我们依旧可以通过 F12、Shift+Ctrl+I等一些操作将控制台调取出来,为了更好地保护网站内容,决定分享一篇如何禁止用户打开控制台的文章,也就有了此文。 网上找的很多代码不管用,最后在wangn...

semial的专栏 5172

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

js如何禁止打开控制台

1. 禁用浏览器 默认右键菜单 document.oncontextmenu = new Function("return false;"); 2.监听键盘事件 document.onkeydown = document.onkeyup = document.onkeypress = function(event) { var e = event || window.event || arg...

qq_36926807的博客 4035

js禁止打开控制台,如何强行打开控制台?

选择好了之后回到第一个页签,选择需要修改的js文件,右键选择 替换内容。但是我们发现代码是被压缩过的,是一行代码,然后选择 格式化。所以我们需要把这个文件替换掉,然后干掉。进入到这个网站的首页,然后右键查 看网站的源码。保存,刷新一下页面就可以打开控制台访问页面了。(我是IE浏览器),谷歌浏览器是 替换。当我在查看某个网站的源码时,按。再输入网站也会进入到百度首页。会跳转到百度页面,或者先打开。

菜鸡的博客 3527

【js】鼠标禁止右键禁止打开控制台及键盘禁用

大家好,今天和大家分享一下在前端js中禁止鼠标在浏览器中右键,禁止鼠标选中和禁止键盘按键。这个方法是我在制作一个单词考核系统时所使用到的,因为在考试期间如果打开控制台,通过控制台找到了正确的答案,那么就没有意义了。所以就需要将控制台禁用,所应用到的也是一些基础的知识,下面我们就一起来看一看吧!

SqlloveSyn的博客 7682

【前端安全】JS/Vue/React 禁止打开浏览器控制台的多种实现方式(附完整代码)

/ 禁用右键// 拦截快捷键if () {// 检测控制台打开alert('禁止打开控制台!');}, 500);// 绑定事件// 组件卸载时解绑事件(避免内存泄漏)}, []);步骤 2:在根组件中使用 Hook(App.js)// 调用禁止控制台Hookreturn (<h1>React 禁止控制台示例</h1></div>原生 JS 禁止控制台的核心是拦截快捷键 / 右键检测控制台尺寸变化;Vue 中可在main.js。

CH20031223的博客 542

js 禁止鼠标右键及F12功能(禁止打开控制台)

js禁止鼠标右键及F12打开控制台 1、PC端网页禁止图片保存; 2、禁止鼠标右键事件; 3、禁止F12键打开控制台; window.document.oncontextmenu = function(){ return false; } document.onkeydown = document.onkeyup = document.onkeypress = function(event) { var e = event || window.event || arguments.ca

风如白话的博客 1813

JS禁止浏览器打开控制台或查看源代码

分享知识 传递快乐 JS禁止浏览器打开控制台或查看源代码 在做支付的时候为了保证提交参数的安全、以及为了保证重定向时地址不被查看和修改,必须要禁用浏览器的控制台或源码查看功能,以保证参数及地址的安全不被修改。 参考代码如下: window.onload = function () { document.onkeydown = function () { var e = wi...

旷野历程 3470

html浏览器状态栏控制,JavaScript 实现禁止打开控制台(右键/工具栏/F12/Shift+Ctrl+I)...

前两天分享的插件WP Content Copy Protection & No Right Click——深度保护您的网站内容有网友说可以把检查代码的功能给屏蔽了,经我个人测试发现我们依旧可以通过 F12、Shift+Ctrl+I等一些操作将控制台调取出来,为了更好地保护网站内容,决定分享一篇如何禁止用户打开控制台的文章,也就有了此文。网上找的很多代码不管用,最后在wangning1...

weixin_35070578的博客 833

js 禁止打开控制台无限debugger处理

var div = document.createElement('div'); var loop = setInterval(function () { console.log(div); console.clear(); }, 200); Object.defineProperty(div, "id", { get: function () { clearInterval(loop); //alert("禁止非法调试!请关闭开发者工具!"); .

weixin_47338877的博客 2017

【JavaScript】JavaScript禁止右键菜单和F12打开控制台看代码

<script type="text/javascript"> //禁止鼠标右键菜单和F12打开控制台看源码 function click(e) { if (document.all) { if (event.button==2||event.button==3) { alert("欢迎光临寒舍,有什么需要帮忙的话,请与站长联系!谢谢您的合作!!!"); ...

weixin_30315435的博客 141
上一篇: 如何优雅地书写JavaScript
下一篇: php之curl实现http与https请求的方法
wwwarewow
博客等级 码龄17年 4795粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值