Dobre praktyki
Jak skutecznie stosować obfuskację: co chronić, czego nie ruszać i czego obfuskacja nie jest w stanie za Ciebie zrobić.
Zalecenia
Obfuskuj tylko własny kod.
Nie stosuj obfuskacji VM do skryptów zewnętrznych dostawców, bibliotek ani polyfilli. Są one już zminifikowane, a obfuskacja jedynie je spowolni.
Używaj trybu komentarzy do precyzyjnej ochrony.
Ustaw
vmTargetFunctionsModena'comment', a następnie oznacz komentarzem/* javascript-obfuscator:vm */tylko wrażliwe funkcje, zamiast chronić wszystko. Zobacz Wskazywanie konkretnych funkcji.Dokładnie testuj po obfuskacji.
Zawsze testuj zobfuskowany kod w docelowym środowisku. Niektóre opcje mogą psuć kod w subtelny sposób. Zabezpieczenia wykonania reagują także na automatyzację testów i debuggery; zobacz Testy i CI.
Wyłączaj często wykonywane ścieżki z obfuskacji VM.
Używaj
vmExcludeFunctionsdla pętli animacji, renderowania w czasie rzeczywistym lub często wywoływanego kodu. Dopasowuje ona tylko nazwy funkcji najwyższego poziomu (przy Async Executor - najbardziej zewnętrznych funkcjiasync); aby wyłączyć z VM zagnieżdżony, często wykonywany kod, użyj trybu komentarzy i oznacz tylko funkcje wymagające ochrony.
Ważna uwaga dotycząca bezpieczeństwa
Nigdy nie przechowuj kluczy API, sekretów ani danych uwierzytelniających w kodzie JavaScript frontendu, nawet po obfuskacji.
Obfuskacja zwiększa wysiłek potrzebny do zrozumienia i modyfikacji kodu, ale nie jest szyfrowaniem i nie gwarantuje, że inżynieria wsteczna jest niemożliwa. Środowisko uruchomieniowe pozostaje obserwowalne w środowisku kontrolowanym przez atakującego, więc zdeterminowany atakujący zawsze może wydobyć dane z kodu działającego po stronie klienta. Sekrety i wiążące decyzje dotyczące bezpieczeństwa trzymaj na serwerze.
W praktyce:
- Przechowuj sekrety na serwerze backendu
- Używaj zmiennych środowiskowych po stronie serwera
- Przekazuj wywołania API przez swój backend, aby ukryć klucze
- Używaj krótkotrwałych tokenów wydawanych przez Twój serwer
Co warto chronić?
Obfuskacja VM sprawdza się idealnie w przypadku:
- Autorskich algorytmów i logiki biznesowej
- Kodu weryfikacji licencji (kontroli po stronie klienta)
- Zabezpieczeń przed manipulacją i kontroli integralności
- Logiki gier i mechanizmów anti-cheat
- Implementacji funkcji premium
- Logiki wyliczania cen
Build i wydanie
Obfuskuj skompilowany i zbundlowany wynik jako ostatni krok builda; pipeline builda opisuje strona Zgodność środowiska. Zmierz koszt wybranego presetu na własnym kodzie, jak opisano w Wybór presetów. Uruchom testy funkcjonalne na buildzie testowym, a następnie zweryfikuj osobny artefakt wydania, który faktycznie publikujesz, jak opisano w Testy i CI.
