為啥要禁止?
由于前端頁面會(huì)調(diào)用很多接口,有些接口會(huì)被別人爬蟲分析,破解后獲取數(shù)據(jù)
為了杜絕這種情況,最簡單的方法就是禁止人家調(diào)試自己的前端代碼
無限 debugger
前端頁面防止調(diào)試的方法主要是通過不斷debugger來瘋狂輸出斷點(diǎn),因?yàn)閐ebugger在控制臺(tái)被打開的時(shí)候就會(huì)執(zhí)行
由于程序被debugger阻止,所以無法進(jìn)行斷點(diǎn)調(diào)試,所以網(wǎng)頁的請求也是看不到的
基礎(chǔ)代碼如下:
/** * 基礎(chǔ)禁止調(diào)試代碼 */ (() => { function ban() { setInterval(() => { debugger; }, 50); } try { ban(); } catch (err) { } })();
無限 debugger 的對策
如果僅僅是加上面那么簡單的代碼,對于一些技術(shù)人員而言作用不大
可以通過控制臺(tái)中的Deactivate breakpoints按鈕或者使用快捷鍵Ctrl + F8關(guān)閉無限debugger
這種方式雖然能去掉礙眼的debugger,但是無法通過左側(cè)的行號添加breakpoint
禁止斷點(diǎn)的對策
如果將setInterval中的代碼寫在一行,就能禁止用戶斷點(diǎn),即使添加logpoint為false也無用
當(dāng)然即使有些人想到用左下角的格式化代碼,將其變成多行也是沒用的
(() => { function ban() { setInterval(() => { debugger; }, 50); } try { ban(); } catch (err) { } })();
忽略執(zhí)行的代碼
通過添加add script ignore list需要忽略執(zhí)行代碼行或文件
也可以達(dá)到禁止無限debugger
忽略執(zhí)行代碼的對策
那如何針對上面操作的惡意用戶呢
可以通過將debugger改寫成Function("debugger")();的形式來應(yīng)對
Function構(gòu)造器生成的debugger會(huì)在每一次執(zhí)行時(shí)開啟一個(gè)臨時(shí)js文件
當(dāng)然使用的時(shí)候,為了更加的安全,最好使用加密后的腳本
javascript
復(fù)制代碼
// 加密前 (() => { function ban() { setInterval(() => { Function('debugger')(); }, 50); } try { ban(); } catch (err) { } })(); // 加密后 eval(function(c,g,a,b,d,e){d=String;if(!"".replace(/^/,String)){for(;a--;)e[a]=b[a]||a;b=[function(f){return e[f]}];d=function(){return"w+"};a=1}for(;a--;)b[a]&&(c=c.replace(new RegExp(""+d(a)+"","g"),b[a]));return c}('(()=>{1 0(){2(()=>{3("4")()},5)}6{0()}7(8){}})();',9,9,"block function setInterval Function debugger 50 try catch err".split(" "),0,{}));
終極增強(qiáng)防調(diào)試代碼
為了讓自己寫出來的代碼更加的晦澀難懂,需要對上面的代碼再優(yōu)化一下
將Function('debugger').call()改成(function(){return false;})['constructor']('debugger')['call']();
并且添加條件,當(dāng)窗口外部寬高和內(nèi)部寬高的差值大于一定的值 ,我把body里的內(nèi)容換成指定內(nèi)容
當(dāng)然使用的時(shí)候,為了更加的安全,最好加密后再使用
(() => { function block() { if (window.outerHeight - window.innerHeight > 200 || window.outerWidth - window.innerWidth > 200) { document.body.innerHTML = "檢測到非法調(diào)試,請關(guān)閉后刷新重試!"; } setInterval(() => { (function () { return false; } ['constructor']('debugger') ['call']()); }, 50); } try { block(); } catch (err) { } })();
審核編輯:彭菁
-
接口
+關(guān)注
關(guān)注
33文章
8998瀏覽量
153707 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7255瀏覽量
91820 -
程序
+關(guān)注
關(guān)注
117文章
3826瀏覽量
82961 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70697
原文標(biāo)題:禁止別人調(diào)試自己的前端頁面代碼
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
鴻蒙原生應(yīng)用元服務(wù)開發(fā)WEB-使用Devtools工具調(diào)試前端頁面
關(guān)于手機(jī)的TX調(diào)試,急急急
為什么STM32會(huì)禁止JTAG調(diào)試功能卻保留SWD下載調(diào)試功能呢
Harmony自定義頁面請求與前端頁面調(diào)試
HFC前端到同軸電纜的調(diào)試
《自己動(dòng)手寫前端框架》電子書
PID算法原理_調(diào)試經(jīng)驗(yàn)以及代碼總結(jié)
STM32單片機(jī)在調(diào)試時(shí)禁止開門狗IWDG,WWDG

如何通過cmm命令設(shè)置調(diào)試映像源代碼路徑
智能制造行業(yè)--客戶現(xiàn)場調(diào)試源代碼如何防泄密

前端調(diào)試實(shí)踐

評論