禁止調試,阻止瀏覽器F12開發者工具

禁止調試,阻止瀏覽器F12開發者工具

31,158閱讀3分鐘
 
專欄: 
安全相關
 

寫在前面

這兩天突然想看看文心一言的http通信請求接口,於是想着用F12看看。

誰知道剛打開開發者工具,居然被動debugger了。

直接被JS寫死的debugger關鍵字下了斷點。行吧,不讓調試就不讓調試吧,關閉開發者工具之後,直接跳到了空白頁。

其實幾年之前就碰到過類似的情況,不過當時才學疏淺,也沒當回事,就沒研究過。這次又碰到了,畢竟已經不是當年的我了,於是便來研究研究。

分析

大家都知道瀏覽器的開發者工具能幹啥,正經的用法:開發時調試代碼邏輯,修改佈局樣式;不正經的用法:改改元素騙騙人,找找網站接口寫爬蟲,逆向js破解加密等等,所以說前端不安全,永遠不要相信用戶的輸入。

而這次碰到的這個情況確實可以在用戶端做一些防禦操作,但是也可以繞過。 (PS:感謝評論區大佬指教:開發者工具Ctrl+F8可以禁用斷點調試,學到了)

先做一波分析。

首先,防止你用F12調試,先用debugger關鍵字阻止你進行任何操作。隨後,在你關閉之後,又直接跳轉到空白頁,不讓你接着操作。

這就需要一個開發者工具檢測的機制了,發現你打開了開發者工具,就給你跳走到空白頁。

所以,關鍵就是要實現開發者工具的檢測。

實現

經過查閱一番,發現原來這個debugger可能並不僅僅是阻止你進行調試的功能,同時還兼具判斷開發者工具是否打開的作用。怎麼實現?

debugger本身只是調試,阻止你繼續對前端進行調試,但是代碼中並不知道用戶是否打開了開發者工具,所以就無法進行更進一步的操作,例如文心一言的跳轉到空白頁。

但是,有一點,你打開開發者工具之後,debugger下了斷點,程序就停到那裏了,如果你不打開開發者工具,程序是不會停止到斷點的。沒錯,這就是我們可以判斷的方式,時間間隔。正常情況下debugger前後的時間間隔可以忽略不計。但是,當你打開開發者工具之後,這個時間間隔就產生了,判斷這個時間間隔,就可以知道是否打開了開發者工具。

直接上示例代碼

 
html
複製代碼
<!DOCTYPE html>
<html>
    <header>
        <title>test</title>
    </header>
    <body>
        <h1>test</h1>
    </body>
    <script>
        setInterval(function() {

            var startTime = performance.now();
          	// 設置斷點
            debugger; 
            var endTime = performance.now();
           	// 設置一個閾值,例如100毫秒
            if (endTime - startTime > 100) {
                window.location.href = 'about:blank';
            } 
            
        }, 100);

    </script>

</html>

通過設置一個定時循環任務來進行檢測。

在不打開發者工具的情況下,debugger是不會執行將頁面卡住,而恰恰是利用debugger的這一點,如果你打開開發者工具一定會被debugger卡住,那麼上下文時間間隔就會增加,在對時間間隔進行判斷,就能巧妙的知道絕對開了開發者工具,隨後直接跳轉到空白頁,一氣呵成。

測試

現在來進行測試,打開F12

 關閉開發者工具。

完美!

寫在後面

這樣確實可以阻擋住通過在開發者工具上獲取信息,但是僅僅是瀏覽器場景。我想要拿到對話的api接口也不是隻有這一種方法。

感謝評論區大佬指教:開發者工具Ctrl+F8可以禁用斷點調試

或者說,開個代理抓包不好嗎?hhh

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章