Obfuskator JavaScript

Obfuskacja zwiększa koszt czytania kodu źródłowego JavaScript, nie całkowicie (żadna obfuskacja po stronie front-endu nie jest nie do złamania), ale na tyle, by zniechęcić do pobieżnego zaglądania i spowolnić automatyczne scrapowanie. To narzędzie stosuje kodowanie tablic ciągów, zaciemnianie identyfikatorów, spłaszczanie przepływu sterowania oraz opcjonalne wstrzykiwanie martwego kodu, przy czym każdą opcję można wybrać w zależności od tego, jak agresywnie chcesz działać.

Jak zaciemnić kod JavaScript

  1. 1

    Wklej kod źródłowy

    Dowolny poprawny kod JS. Jeśli opiera się on na konkretnych nazwach właściwości globalnych ze strony hosta, ustaw je jako zarezerwowane.

  2. 2

    Wybierz techniki

    Kodowanie ciągów (hex / base64), zaciemnianie identyfikatorów, spłaszczanie przepływu sterowania, wstrzykiwanie martwego kodu, samobroniący się wrapper.

  3. 3

    Wybierz profil docelowy

    Przeglądarka (bezpieczny dla ES5, bez API Node), Node.js (zezwala na `require`, `Buffer`) lub niski (głównie minifikacja).

  4. 4

    Zaciemnij

    Narzędzie zwraca przekształcony kod wraz z różnicą rozmiaru. Agresywne ustawienia mogą sprawić, że wynik będzie 3–5 razy większy od źródła.

Techniki i to, ile Cię kosztują

Technika Zwiększa wysiłek atakującego Koszt w czasie działania Koszt rozmiaru
Zmiana nazw zmiennych Niski Pomijalny Mniejszy (efekt uboczny minifikacji)
Kodowanie tablic ciągów Średni Znikomy (jedno wyszukanie na ciąg) +10–30%
Spłaszczanie przepływu sterowania Wysoki Mierzalny (~2–5%) +50–150%
Wstrzykiwanie martwego kodu Niski (pozorne bezpieczeństwo) Mały +20–50%
Samobroniący się wrapper Średni Jednorazowe sprawdzenie +5–10%
Ochrona przed debugowaniem Średni (wykrywa DevTools) Jednorazowe sprawdzenie +5%
VM / wirtualizacja (premium) Bardzo wysoki Duży (5–20x) +300–500%

Czego obfuskacja nie chroni

  • Sekretów. Każdą stałą w kodzie źródłowym front-endu da się odczytać, mając dość czasu. Klucze API, sekrety uwierzytelniania, logika cenowa, nigdy nie polegaj na obfuskacji, by je ukryć. Przenieś je na serwer.
  • Algorytmów o obserwowalnym wyniku. Jeśli przeglądarka potrafi to uruchomić, atakujący z debuggerem może obserwować każde wejście i wyjście. Obfuskacja to spowalnia; nie zatrzymuje.
  • Automatycznego scrapowania na dużą skalę. Ochrona przed scrapowaniem opiera się na wykrywaniu zachowań (fingerprinting, limity częstości, CAPTCHA), a nie na obfuskacji kodu źródłowego.

Kiedy obfuskacja się opłaca

  • Ochrona przed manipulacją we wbudowanych SDK (licencjonowanie, SDK reklamowe, klienty gier).
  • Podniesienie kosztu łatwego skopiowania konkurencyjnej implementacji metodą kopiuj-wklej.
  • Utrudnienie automatycznej klasyfikacji skryptów dla scraperów o szerokim zasięgu.

Kiedy przynosi odwrotny skutek

  • Masz już bundler. Webpack + Terser w trybie produkcyjnym już minifikuje i zaciemnia zmienne lokalne. Dodanie drugiego przebiegu obfuskacji daje niewiele i rozdyma rozmiar bundla.
  • Optymalizujesz pod First Paint / Core Web Vitals. Agresywna obfuskacja potraja bundel, co szkodzi FCP i LCP.
  • Musisz debugować na produkcji. Ciężka obfuskacja czyni ślady stosu z Sentry niemal bezużytecznymi bez pasującej mapy źródeł, a wysłanie mapy źródeł niweczy obfuskację.

Częste błędy

  • Traktowanie obfuskacji jako równoważnej szyfrowaniu. Nią nie jest, to tylko przeszkoda spowalniająca.
  • Wysyłanie mapy źródeł razem z zaciemnionym bundlem na produkcję. To całkowicie neutralizuje obfuskację.
  • Obfuskowanie bibliotek zewnętrznych wczytanych już z CDN. Ponosisz karę rozmiaru bez żadnej korzyści.

Najczęściej zadawane pytania

Nie. Obfuskacja to przeszkoda, a nie zamek. Zdeterminowany analityk z debuggerem odtworzy logikę. Podnosi koszt na tyle, by zniechęcić pobieżne przeglądanie i większość automatycznych scraperów, ale to nie jest zabezpieczenie.

Jeśli sięgasz po właściwości dynamicznie (obj["field_name"], Object.keys(obj)) lub polegasz na konkretnych nazwach funkcji/klas dla strony hosta, dodaj je do listy zarezerwowanych. Bez tego zmiana nazw właściwości może zepsuć integracje zewnętrzne.

Zachowaj oryginalny kod źródłowy. Obfuskator to przekształcenie jednokierunkowe; nie odtworzysz dokładnie oryginału z zaciemnionego wyniku, a jedynie czytelne przybliżenie.

Lekka obfuskacja dodaje ~10–30%. Spłaszczanie przepływu sterowania wraz z tablicami ciągów dodaje 50–150%. Najcięższe ustawienia mogą potroić rozmiar. Przed wysyłką sprawdź licznik rozmiaru wyniku.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach