Что делает инструмент
Обфускатор JavaScript переписывает скрипт так, что он работает точно так же, но людям гораздо труднее его прочитать и скопировать. Имена переменных и функций превращаются в бессмысленные идентификаторы вроде _0x3f2a, строковые литералы переносятся в закодированную таблицу, а на высоких уровнях поток управления перемешивается и добавляется мёртвый код.
Это полезно для браузерных игр, демо, виджетов и проверок лицензии, которые вы распространяете в виде обычного JavaScript и не хотите, чтобы их копировали слово в слово.
Как пользоваться
- Вставьте JavaScript или откройте файл
.js. - Выберите Силу:
- Низкая переименовывает локальные имена и переносит строки в массив. Результат остаётся быстрым и довольно компактным.
- Средняя добавляет кодирование строк, выравнивание потока управления и немного мёртвого кода.
- Высокая применяет всё на полную мощность. Результат может быть во много раз больше и заметно медленнее.
- Включайте Переименовывать глобальные имена, только если ничто вне скрипта не обращается к его функциям и переменным верхнего уровня.
- Выключите Вывод в одну строку, если хотите получить результат на нескольких строках.
- Скопируйте или скачайте обфусцированный код и протестируйте его перед деплоем.
Пример
В примере определены функция greet и счётчик посещений. После обфускации с низкой силой код превращается в одну строку с шестнадцатеричными именами, но при запуске всё так же выводит Hello, Ada! You have visited 1 time(s).
Обфускация и минификация
Минификация, как в минификаторе JavaScript и CSS, удаляет пробелы и сокращает имена, чтобы файлы были меньше и быстрее загружались. Обфускация в плане размера действует наоборот: она намеренно добавляет косвенность, чтобы код было труднее понять. Многие проекты минифицируют всё, а обфусцируют только несколько файлов с логикой, которую стоит защитить.
Ограничения
Обфускация не защищает секреты. Всё, что может выполнить браузер, пользователь рано или поздно сможет изучить, поэтому держите API-ключи и бизнес-правила, которые должны оставаться приватными, на сервере. Тяжёлые настройки к тому же замедляют код, так что избегайте их в горячих циклах и на страницах, чувствительных к производительности.
Частые вопросы
› Меняет ли обфускация поведение кода?
Нет. Обфусцированный скрипт ведёт себя так же, как исходный; меняется только его форма. Всегда прогоняйте тесты на обфусцированной сборке: код, который анализирует собственный исходный текст или имена функций, может вести себя иначе.
› Можно ли восстановить обфусцированный код?
Не полностью, но упорный человек со временем всё же разберётся, что он делает. Считайте обфускацию «лежачим полицейским» против случайного копирования, а не местом для хранения секретов вроде API-ключей.
› Когда включать «Переименовывать глобальные имена»?
Только когда скрипт самодостаточен. Переименование глобальных имён ломает HTML-атрибуты, другие скрипты или тесты, которые вызывают ваши функции верхнего уровня по имени.
› Загружается ли мой код на сервер?
Нет. Обфускация выполняется в браузере с помощью open source библиотеки javascript-obfuscator.