2017-04-01 61 views
0

在你們任何人開始說這是不可能的之前,請導航到facebook.com打開開發工具,,即使在非掛接模式,它會告訴你,開發工具打開,對吧?Javascript +瀏覽器 - 如何檢測開發工具/螢火蟲何時開啓?

那麼facebook如何能夠取消這一切?

我能做到這一點的附加的Windows

window.outerHeight - window.innerHeight > 200 || window.outerWidth - window.innerWidth > 200 

但是,當彈出窗口,這是行不通的。

臉書如何能夠取消這一點?

+3

我猜他們把該控制檯的警告前期。直到你打開開發工具,你纔會發現它。我不確定我是否理解你爲什麼需要知道devtool是否開放。 – elpddev

+1

@elpddev,你是對的,它只是'console.log'的一些花哨的格式。看到我的答案,如果你關心看到他們使用的代碼。 –

回答

1

正如@elpddev在評論中猜測,他們只是使用console.log記錄它在頁面加載時,他們沒有檢測到你已經打開控制檯。

如果您檢查頁面上的JS代碼,你會發現這一點:

var j = i.stop || h._("Stop!") 
    , k = i.text || h._("This is a browser feature intended for developers. If someone told you to copy-paste something here to enable a Facebook feature or \"hack\" someone's account, it is a scam and will give them access to your Facebook account.") 
    , l = i.more || h._("See {url} for more information.", [h.param('url', 'https://www.facebook.com/selfxss')]); 
if ((window.chrome || window.safari) && !i.textonly) { 
    var m = 'font-family:helvetica; font-size:20px; '; 
    [[j, i.c1 || m + 'font-size:50px; font-weight:bold; ' + 'color:red; -webkit-text-stroke:1px black;'], [k, i.c2 || m], [l, i.c3 || m], ['', '']].map(function(s) { 
     setTimeout(console.log.bind(console, '\n%c' + s[0], s[1])); 
    }); 
} else { 
    var n = ['', ' .d8888b. 888      888', 'd88P Y88b 888      888', 'Y88b.  888      888', ' "Y888b. 888888 .d88b. 88888b. 888', ' "Y88b. 888 d88""88b 888 "88b 888', '  "888 888 888 888 888 888 Y8P', 'Y88b d88P Y88b. Y88..88P 888 d88P', ' "Y8888P" "Y888 "Y88P" 88888P" 888', '       888', '       888', '       888'] 
     , o = ('' + k).match(/.{35}.+?\s+|.+$/g) 
     , p = Math.floor(Math.max(0, (n.length - o.length)/2)); 
    for (var q = 0; q < n.length || q < o.length; q++) { 
     var r = n[q]; 
     n[q] = r + new Array(45 - r.length).join(' ') + (o[q - p] || ''); 
    } 
    console.log('\n\n\n' + n.join('\n') + '\n\n' + l + '\n'); 
    return; 
} 

這是一個有點難以閱讀,因爲它已經過壓縮,即使有漂亮的印刷。 j = i.stop || h._("Stop!")類型的東西似乎試圖加載本地化的文本,回落到英語。然後測試他們是否檢測到Chrome或Safari瀏覽器,並且未設置i.textonly,如果是這樣的話,它將顯示在Chrome/Safari中查看時使用的漂亮樣式。該else條款是難以遵循,但它似乎創建ASCII藝術的旗幟,你在文本模式或非Chrome/Safari瀏覽器上得到:

.d8888b. 888      888  
d88P Y88b 888      888  
Y88b.  888      888 This is a browser feature intended for 
"Y888b. 888888 .d88b. 88888b. 888 developers. If someone told you to copy-paste 
    "Y88b. 888 d88""88b 888 "88b 888 something here to enable a Facebook feature 
     "888 888 888 888 888 888 Y8P or "hack" someone's account, it is a 
Y88b d88P Y88b. Y88..88P 888 d88P   scam and will give them access to your 
"Y8888P" "Y888 "Y88P" 88888P" 888 Facebook account. 
          888    
          888    
          888    

See https://www.facebook.com/selfxss for more information. 
1

我認爲facebook所做的只是在控制檯中記錄了警告。 下面是在Chrome中適用於我的代碼。 我禁用3點的方法,我知道在Chrome啓動開發工具:

  1. 右鍵單擊並選擇檢查選項:對於這一點,我禁用右鍵點擊
  2. F12鍵按:阻止該事件的默認行爲
  3. 按Ctrl + Shift + I:阻止所有的Ctrl默認行爲

請參閱,如果你能負擔得起。

document.onkeydown = function(event) {  
    if(event.code == "F12" || event.ctrlKey) { 
     event.preventDefault(); 
    } 
} 
document.addEventListener('contextmenu', event => event.preventDefault()); 
相關問題