主页 > 其他  > 

JS禁止web页面调试

JS禁止web页面调试
前言

由于前端在页面渲染的过程中 会调用很多后端的接口,而有些接口是不希望别人看到的,所以前端调用后端接口的行为动作就需要做一个隐藏。

禁用右键菜单 document.oncontextmenu = function() { console.log("禁用右键菜单"); return false; }; 禁用F12 document.onkeydown = document.onkeyup = document.onkeypress = function(event) { let e = event || window.event || arguments.callee.caller.arguments[0]; if (e && e.keyCode == 123) { e.returnValue = false; return false; } }; 禁用开发者工具

实际开发中有多少实现方案,这里我们使用的是 无限debugger

大概实现思路:

因为 debugger; 打断点代码 只有在 控制台被打开的时候 才会执行。 所以 写一个无限debugger, 当控制台被打开时,程序被 debugger 阻止, 故而 网页的请求也是看不到的,也 无法进行 手打断点调试。

基础版 (() => { function ban() { setInterval(() => { debugger; }, 50); } try { ban(); } catch (err) { } })(); 增强版

Function 构造器生成的 debugger 会在每一次执行时开启一个 临时 js 文件。

(() => { function ban() { setInterval(() => { Function('debugger')(); }, 50); } try { ban(); } catch (err) { } })(); 终极版

1、提升 增强版 的写法

将 Function('debugger')(); 改写为: (function () { return false; } ['constructor']('debugger') ['call']());

2、在 增强版 的基础上 加上 DOM尺寸判断,进而 检测 控制台是否被打开

(() => { function block() { // 控制台的 高度 或者 宽度 大于 200px时 则 满足条件 if (window.outerHeight - window.innerHeight > 200 || window.outerWidth - window.innerWidth > 200) { document.body.innerHTML = "检测到非法调试,请关闭后刷新重试!"; } setInterval(() => { (function () { return false; } ['constructor']('debugger') ['call']()); }, 50); } try { block(); } catch (err) { } })();

说句题外话: 写到这 突然想到一句对于程序员来说很搞笑的话: 一个Bug是Bug, 一堆Bug能work。 当然,我们的目标就是消灭每一个Bug!!!加油

标签:

JS禁止web页面调试由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“JS禁止web页面调试