Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: masofox 19. 01. 2018, 07:26:20
-
Prý existuje v javascriptu možnost (možná nepřímo, nějak pomocci "side-channel"), zjistit, zda je zapnutý vývojářské nástroje na webu, tedy hlavně konzole a to pak způsobí problém:
-bez otevřených vývojář. nástrojů a konzole se těžko "analyzuje" stránka
- otevřený vývojář. nástroj skript pozná
čili jde o podobný problém, jako když virus zkoumá, jestli běží ve virtuální prostředí (jednak aby vznikl dojem, že je neškodný na první pohled a za druhé ztížit co dělá fakticky)
Nevíte jak to stránka zkoumá a jak tuto detekci znemožnit?
Napadají mě 2 možnosti:
-Console.log vrátí třeba false/vyjimku místo undefined
-stránka počítá rozměry plochy a okna (window.height, documentElement.offset/client/scrollHeight) - otevřené panely a dokovací okna ukrajují nějaký rozměr - pokud by to byla pravda, stačí detachovat okno konzole na jiný monitor (za pár tisíc přikoupit, zvrácený.cz)
-
10 sekund v Google - https://stackoverflow.com/questions/7798748/find-out-whether-chrome-console-is-open
-
Možná jsem to přehlédl, ale je tam i , jak znemožnit?
-
Jak to znemoznit tam sice napsane neni, ale je tam napsana jedna moznost detekce - 'This solution takes advantage of the fact that toString() is not called on logged objects unless the console is open.'
Tento usecase by se dal teoreticky vyresit prepsanim console objektu za vlastni, nicmene ve vysledku zalezi na tom, jakou metodu detekce pouziva dana stranka.
-
Myslim ze postaci zabalit tu stranku do <iframe> a pak je jeji window objekt sandboxovan a nema nic s hlavnim window objektem.
-
window.innerHeight = window.outerHeight
po načtení okna může fungovat, pokud zjišťují podle rozdílu těch hodnot jako tento script https://github.com/sindresorhus/devtools-detect
-
většinu detekcí dříve vyřešil vzdálený debuging, kdy v contextu samotné stránky se nemění interní JS objecty.
Neměl by být velký problém odstranit či zamezit změně globálních objektů při otevření konzole, prakticky interaktivní režim není potřeba a co si pamatuji jinej důvod změny globálních objektů nebyl.
On ale i tak asi bude existovat side channel, js běží v jednom vláknu a konzole musí běžet v tom samém vláknu a je těžké sledovat kód a přitom ho neovlivnit aby to poznal.