Обфускация Javascript на ходу на PHP
Пользователи подключают мой скрипт вида <script src="//domain.com/user-uuid/script.js"></script> на свой сайт. PHP по шаблону генерирует на ходу скрипт для них (в зависимости от настроек и множества других условий).
На днях встала тема защиты скрипта, скрипт платный и стоит денег, вся логика находится на front-end, скопировать не составляет трудности. До недавних пор полагался лишь на секрет неуловимого Джо.
Какие варианты у меня:
CLI-утилиты типа javascript-obfuscator.
Плюс: очень качественная обфускация, с множеством защит от деобфускации.
Минус: сравнительно медленный и не работает на простом shared-хостингеПростое шифрование кода каким-то алгоритмом и исполнение через
eval.
Плюс: скорость такая, как нужно.
Минус: очнь легко обойти - если заменитьevalнаconsole.log, недоброжелатель тут же получит расшифрованый код.
Ответы (1 шт):
Итак, у меня была довольно специфическая структура проекта, JS-код генерировался на ходу с помощью PHP. Нужно было обфусцировать код, но оставить возможность добавлять некоторые данные на ходу на PHP.
Сейчас расскажу как я решил эту проблему.
TL;DR:
Я локально переобфусцирую код и кладу его в соседнюю папку после изменений.
Во-первых, я подключил Webpack. Части, которые раньше вставлялись на PHP теперь подключаются с помощью require. Так же это позитивно сказалось на структуре кода проекта.
Я подключил Webpack-плагин для известного обфускатора javascript-obfuscator.
"Динамичные" данные, которые должны вставлятся с помощью PHP, я вставляю в виде переменных типа __$$CONFIG$$__ и __$$IS_DEV$$__, которые с помощью PHP заменялись на ходу на JSON-массив или код. Таким же образом заменялись некоторые данные в строковых литералах. Эти строки и идентификаторы я добавил в список исключений, чтоб обфускатор их не переименовал.
После изменений я делаю npm build и потом делаю коммит, в котором в одной папке изменения в исходниках, а в другой - в обфусцированной сборке. А потом cron-скрипт подтягивает обновление из GitHub на хостинг.