JS
Obfuskátor JS
Obfuskujte JavaScript, aby byl těžko čitelný.
O obfuskaci JavaScriptu
Obfuskace přepíše JavaScript tak, aby fungoval naprosto stejně, ale byl pro člověka mnohem hůře čitelný — proměnné se přejmenují na nesmyslné řetězce, řetězcové literály se rozdělí a zakódují a běžný tok kódu se přesměruje přes zbytečné zacházky. Na rozdíl od minifikace není cílem menší soubor, ale matoucí.
Tři úrovně vyměňují sílu obfuskace za velikost výstupu a náklady za běhu. Nízká přejmenuje identifikátory a přesune řetězcové literály do pole; střední přidává zploštění řídicího toku (přestavbu přímočaré logiky na hůře sledovatelný stavový automat) a vkládání mrtvého kódu; vysoká přidává řetězce kódované v RC4, rozdělí řetězcové literály na kousky a zapne sebeobranný kód, který se rozbije, pokud se výstup přeformátuje nebo prožene formátovacím nástrojem. Vyšší úrovně vytvářejí znatelně větší soubory a pomalejší běh, takže vysokou úroveň si nechte na kód, který si takovou cenu opravdu zaslouží, třeba na kontrolu licence, spíše než na celou aplikaci.
Kde se s tím setkáte
- Ztížení kopírování nebo zpětného inženýrství logiky na straně klienta
- Ochrana kontrol licencí nebo API klíčů vložených do frontendového kódu
- Distribuce balíčku bez odhalení vnitřních názvů funkcí a proměnných
- Zvýšení nákladů na manipulaci s kódem běžícím v nedůvěryhodném prostředí
Často kladené otázky
Je obfuskovaný kód skutečně bezpečný?
Ne. Obfuskace zvyšuje úsilí potřebné k přečtení nebo úpravě kódu, ale vše, co běží v prohlížeči, může odhodlaná osoba nakonec deobfuskovat. Nikdy se na ni nespoléhejte při ochraně skutečných tajemství, jako jsou privátní API klíče.
Jaký je rozdíl mezi obfuskací a minifikací?
Minifikace zmenšuje velikost souboru, ale stále se snadno vrátí zpět pomocí nástroje pro zkrášlení. Obfuskace záměrně dělá logiku matoucí — přejmenované identifikátory, zakódované řetězce, přestrukturovaný tok řízení — i po přeformátování.
Zpomalí obfuskace můj kód?
Mírně, zejména na vyšších úrovních — zbytečné zacházky a dekódování řetězců přidávají malou zátěž za běhu. U většiny frontendového kódu je to nevýznamné; u výkonově kritických smyček se vyplatí otestovat.
Co konkrétně mění úrovně nízká, střední a vysoká?
Nízká přejmenuje proměnné a funkce na krátká bezvýznamná jména a skryje řetězcové literály do pole. Střední přidává zploštění řídicího toku — přestavbu větví vaší logiky na hůře sledovatelný stavový automat — plus vložený mrtvý kód, který nedělá nic jiného než přidává šum. Vysoká přidává řetězce kódované v RC4, rozdělí literály na kousky znovu skládané za běhu a sebeobranný kód, který rozpozná přeformátování a reaguje na něj. Každá vyšší úroveň stojí víc místa ve výstupu a pomalejší běh výměnou za víc úsilí potřebného k obrácení.