Лучшие практики
Как эффективно применять обфускацию: что защищать, что оставить как есть и чего обфускация сделать за вас не может.
Рекомендации
Обфусцируйте только собственный код.
Не применяйте VM-обфускацию к сторонним скриптам, библиотекам и полифилам. Они уже минифицированы, и обфускация лишь замедлит их.
Используйте режим комментариев для точечной защиты.
Установите
vmTargetFunctionsModeв'comment'и отметьте только чувствительные функции комментарием/* javascript-obfuscator:vm */, вместо того чтобы защищать всё подряд. См. Выбор конкретных функций.Тщательно тестируйте код после обфускации.
Всегда проверяйте обфусцированный код в целевой среде. Некоторые опции могут незаметно ломать код. Защиты времени выполнения также реагируют на средства автоматизации тестов и отладчики; см. Тестирование и CI.
Исключайте часто выполняемые участки из VM-обфускации.
Используйте
vmExcludeFunctionsдля циклов анимации, рендеринга в реальном времени и часто вызываемого кода. Опция сопоставляет только имена функций корневого уровня (при Async Executor - самые внешниеasync-функции); чтобы вывести из VM вложенный часто выполняемый код, используйте режим комментариев и отмечайте только те функции, которым нужна защита.
Важное замечание о безопасности
Никогда не храните API-ключи, секреты и учётные данные во фронтенд-коде на JavaScript - даже с обфускацией.
Обфускация увеличивает усилия, необходимые для понимания и изменения кода, но это не шифрование, и она не может гарантировать, что реверс-инжиниринг невозможен. Среда выполнения остаётся наблюдаемой в окружении, которое контролирует злоумышленник, поэтому настойчивый злоумышленник всегда может извлечь данные из клиентского кода. Храните секреты и принимайте решения, от которых зависит безопасность, на сервере.
На практике:
- Храните секреты на своём бэкенд-сервере
- Используйте переменные окружения на стороне сервера
- Проксируйте вызовы API через свой бэкенд, чтобы скрыть ключи
- Используйте короткоживущие токены, выдаваемые вашим сервером
Что стоит защищать?
VM-обфускация идеально подходит для:
- Проприетарных алгоритмов и бизнес-логики
- Кода проверки лицензий (проверки на стороне клиента)
- Защиты от модификации и проверок целостности
- Игровой логики и античит-механизмов
- Реализации премиум-функций
- Логики расчёта цен
Сборка и релиз
Обфусцируйте скомпилированный и собранный в бандл результат последним шагом сборки; порядок сборки описан в разделе Совместимость со средой. Измерьте накладные расходы выбранного пресета на своём коде, как описано в разделе Выбор пресета. Запускайте функциональные тесты на тестовой сборке, а затем проверяйте отдельный релизный артефакт, который вы действительно выпускаете, как описано в разделе Тестирование и CI.
