禁止別人調(diào)試前端代碼的幾種常見方法
前言
作為web開發(fā)者,我們應(yīng)該都有這樣一個(gè)認(rèn)識(shí):前端代碼是公開的,所有人都能拿到我們代碼,不能把秘鑰等信息寫死在前端。為了避免他人輕易看懂前端代碼,通常我們會(huì)對(duì)代碼進(jìn)行壓縮、混淆等處理。今天帶來一篇文章,作者介紹了幾種避免他人調(diào)試前端代碼的常見方式,感興趣的同學(xué)可以在自己項(xiàng)目里試試。
下面是正文部分。
這里我們不介紹禁止右鍵菜單, 禁止F12快捷鍵和代碼混淆方案。
無限debugger
前端頁面防止調(diào)試的方法主要是通過不斷 debugger 來瘋狂輸出斷點(diǎn),因?yàn)?debugger 在控制臺(tái)被打開的時(shí)候就會(huì)執(zhí)行
由于程序被 debugger 阻止,所以無法進(jìn)行斷點(diǎn)調(diào)試,所以網(wǎng)頁的請(qǐng)求也是看不到的.
基礎(chǔ)方案
(() => {
function ban() {
setInterval(() => { debugger; }, 50);
}
try {
ban();
} catch (err) { }
})();
將 setInterval 中的代碼寫在一行,可以禁止用戶斷點(diǎn),即使添加 logpoint 為 false 也無用
當(dāng)然即使有些人想到用左下角的格式化代碼,將其變成多行也是沒用的
瀏覽器寬高
根據(jù)瀏覽器寬高、與打開F12后的寬高進(jìn)行比對(duì),有差值,說明打開了調(diào)試,則替換html內(nèi)容;
通過檢測(cè)窗口的外部高度和寬度與內(nèi)部高度和寬度的差值,如果差值大于 200,就將頁面內(nèi)容設(shè)置為 “檢測(cè)到非法調(diào)試”。
通過使用間隔為 50 毫秒的定時(shí)器,在每次間隔內(nèi)執(zhí)行一個(gè)函數(shù),該函數(shù)通過創(chuàng)建一個(gè)包含 debugger 語句的函數(shù),并立即調(diào)用該函數(shù)的方式來試圖阻止調(diào)試器的正常使用。
(() => {
function block() {
if (window.outerHeight - window.innerHeight > 200 || window.outerWidth - window.innerWidth > 200) {
document.body.innerHTML = "檢測(cè)到非法調(diào)試";
}
setInterval(() => {
(function () {
return false;
}
['constructor']('debugger')
['call']());
}, 50);
}
try {
block();
} catch (err) { }
})();
關(guān)閉斷點(diǎn),調(diào)整空頁面
在不打開發(fā)者工具的情況下,debugger是不會(huì)執(zhí)行將頁面卡住,而恰恰是利用debugger的這一點(diǎn),如果你打開開發(fā)者工具一定會(huì)被debugger卡住,那么上下文時(shí)間間隔就會(huì)增加,在對(duì)時(shí)間間隔進(jìn)行判斷,就能巧妙的知道絕對(duì)開了開發(fā)者工具,隨后直接跳轉(zhuǎn)到空白頁,一氣呵成。
setInterval(function () {
var startTime = performance.now();
// 設(shè)置斷點(diǎn)
debugger;
var endTime = performance.now();
// 設(shè)置一個(gè)閾值,例如100毫秒
if (endTime - startTime > 100) {
window.location.href = 'about:blank';
}
}, 100);
第三方插件
disable-devtool
disable-devtool可以禁用所有一切可以進(jìn)入開發(fā)者工具的方法,防止通過開發(fā)者工具進(jìn)行的代碼搬運(yùn)。
該庫有以下特性:
支持可配置是否禁用右鍵菜單
禁用 f12 和 ctrl+shift+i 等快捷鍵
支持識(shí)別從瀏覽器菜單欄打開開發(fā)者工具并關(guān)閉當(dāng)前頁面
開發(fā)者可以繞過禁用 (url參數(shù)使用tk配合md5加密)
多種監(jiān)測(cè)模式,支持幾乎所有瀏覽器(IE,360,qq瀏覽器,FireFox,Chrome,Edge…)
高度可配置、使用極簡(jiǎn)、體積小巧
支持npm引用和script標(biāo)簽引用(屬性配置)
識(shí)別真移動(dòng)端與瀏覽器開發(fā)者工具設(shè)置插件偽造的移動(dòng)端,為移動(dòng)端節(jié)省性能
支持識(shí)別開發(fā)者工具關(guān)閉事件
支持可配置是否禁用選擇、復(fù)制、剪切、粘貼功能
支持識(shí)別 eruda 和 vconsole 調(diào)試工具
支持掛起和恢復(fù)探測(cè)器工作
支持配置ignore屬性,用以自定義控制是否啟用探測(cè)器
支持配置iframe中所有父頁面的開發(fā)者工具禁用
使用:
<script disable-devtool-auto src='https://cdn.jsdelivr.net/npm/disable-devtool'></script>
更多使用方法參見官網(wǎng):disable-devtool
disable-devtool
console-ban禁止 F12 / 審查開啟控制臺(tái),保護(hù)站點(diǎn)資源、減少爬蟲和攻擊的輕量方案,支持重定向、重寫、自定義多種策略。
<head>
<!-- ... -->
<script src="https://cdn.jsdelivr.net/npm/console-ban@5.0.0/dist/console-ban.min.js"></script>
<script>
// default options
ConsoleBan.init()
// custom options
ConsoleBan.init({
redirect: '/404'
})
</script>
</head>
在項(xiàng)目中使用:
yarn add console-ban
import { init } from 'console-ban'
init(options)
重定向
ConsoleBan.init({
// 重定向至 /404 相對(duì)地址
redirect: '/404',
// 重定向至絕對(duì)地址
redirect: 'http://domain.com/path'
})
使用重定向策略可以將用戶指引到友好的相關(guān)信息地址(如網(wǎng)站介紹),亦或是純靜態(tài) 404 頁面,高防的邊緣計(jì)算或驗(yàn)證碼等頁面。
注:若重定向后的地址可以通過 SPA 路由切換或 pjax 局部加載技術(shù)等進(jìn)行非真正意義上的頁面切換,則切換后的控制臺(tái)監(jiān)測(cè)將不會(huì)再次生效,對(duì)于 SPA 你可以在路由衛(wèi)士處重新注冊(cè)本實(shí)例,其他情況請(qǐng)引導(dǎo)至真正的其他頁面。
重寫
var div = document.createElement('div')
div.innerHTML = '不要偷看啦~'
ConsoleBan.init({
// 重寫 body 為字符串
write: '<h1> 不要偷看啦~ </h1>',
// 可傳入節(jié)點(diǎn)對(duì)象
write: div
})
重寫策略可以完全阻斷對(duì)網(wǎng)站內(nèi)容的審查,但較不友好,不推薦使用。
回調(diào)函數(shù)
ConsoleBan.init({
callback: () => {
// ...
}
})
回調(diào)函數(shù)支持自定義打開控制臺(tái)后的策略。

總結(jié)
到此這篇關(guān)于禁止別人調(diào)試前端代碼的幾種常見方法的文章就介紹到這了,更多相關(guān)禁止調(diào)試前端代碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript實(shí)現(xiàn)QQ空間相冊(cè)展示源碼
本文給大家分享基于javascript制作的qq空間相冊(cè)展示效果,涉及到html\css布局思維,浮動(dòng)定位詳解,具體實(shí)現(xiàn)代碼大家參考下本文2017-12-12
JS+CSS簡(jiǎn)單樹形菜單實(shí)現(xiàn)方法
這篇文章主要介紹了JS+CSS簡(jiǎn)單樹形菜單實(shí)現(xiàn)方法,涉及JavaScript結(jié)合css動(dòng)態(tài)操作頁面元素結(jié)點(diǎn)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
js數(shù)據(jù)結(jié)構(gòu)排序示例教程(全網(wǎng)精簡(jiǎn)版)
排序算法是屬于數(shù)據(jù)結(jié)構(gòu)的知識(shí)點(diǎn),這篇文章主要介紹了js數(shù)據(jù)結(jié)構(gòu)排序的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2025-05-05
jquery將標(biāo)簽元素的高設(shè)為屏幕的百分比
這篇文章主要介紹了js將標(biāo)簽元素的高設(shè)為屏幕的百分比,需要的朋友可以參考下2017-04-04
實(shí)現(xiàn)lightBox時(shí)的樣式與行為分離減少JS
本教程旨在實(shí)現(xiàn)lightBox時(shí)的樣式與行為分離,減少JS在各方面(全屏遮蔽、ie6中遮蔽select、雙向居中、高度自適應(yīng)內(nèi)容等)的工作。2009-07-07
js獲取當(dāng)前時(shí)間顯示在頁面上并每秒刷新
這篇文章主要介紹了js獲取當(dāng)前時(shí)間顯示在頁面上并每秒刷新,需要的朋友可以參考下2014-12-12
前端頁面在移動(dòng)設(shè)備上顯示不正常的原因及解決方案
當(dāng)頁面在移動(dòng)設(shè)備上顯示不正常時(shí),通常是由于布局、樣式或響應(yīng)式設(shè)計(jì)設(shè)置不當(dāng)所引起的,移動(dòng)設(shè)備的屏幕尺寸、分辨率和交互方式與桌面設(shè)備有很大的不同,本文將詳細(xì)介紹常見的導(dǎo)致頁面在移動(dòng)設(shè)備上顯示不正常的原因,以及如何解決這些問題,需要的朋友可以參考下2024-09-09
怎樣用Javascript實(shí)現(xiàn)函數(shù)柯里化與反柯里化
這篇文章主要介紹了怎樣用Javascript實(shí)現(xiàn)函數(shù)柯里化與反柯里化,想了解函數(shù)柯里化的同學(xué),可以參考下2021-04-04

