Как защитить исходный код PHP, JS, HTML, CSS - обфускация, минимизация, сжатие и шифрование
Иногда требуется скрыть исходный код от просмотра и лёгкого анализа со стороны посторонних. Чаще всего это применимо к некомпилируемым языкам программирования и открытым средствам разметки документов. Так как в случае компилируемых средств, на выходе получается двоичный код, который сложно вернуть в понятный для человека код. Особенно актуальным может быть защита проектов на PHP, JS, HTML, CSS.
Обычно считается, что то, что приходит к пользователю - невозможно защитить. Утверждается, что это напрасно и предлагается оставлять все в открытом виде. Но это, как правило, заблуждение. Существует закономерность - любое действие рождает противодействие, а также все когда-то было невозможным, поэтому не стоит обращать много внимания на подобные высказывания. Если не добился кто-то, не значит, что не сможете Вы - такова природа изобретений.
При должном подходе к защите своего кода можно получить некоторый минимум защиты, что может быть достаточным - так как не все обладают большими познаниями и опытом в разработке, а значит выполнять деобфускацию и разбираться в деобфусцированном коде для них станет сложной задачей. Даже если продукт попадет к профессионалу, он не станет вскрывать его, если он добросовестный. Остальные хотя и могут взломать продукт и получить примерный исходный код, но их число может быть не таким большим и это уже все же нарушение и может преследоваться по закону, если установлены определенные условия пользования программным продуктом.
Другими словами, если даже и использовать открытые средства разработки - то исходный код не обязательно должен быть таким же открытым и понятным для других, с комментариями и пояснениями - возможно Ваша задача являлась как раз написать запутанный код и критиковать, что Вы написали плохой код ("говнокод", грязный код и т.д.) будет неуместно.
Для защиты может быть применено несколько операций - обфускация, минимизация, сжатие, шифрование и т.д. Важно разделять эти понятия, так как зачастую именно разделение задачи на подзадачи является успехом к выполнению поставленной цели.
Можно начать с обфускации - привести код в непонятный вид. Для этого можно использовать лексический анализ языка программирования и представление его в лексемах - это применимо как раз для языка PHP (есть специальная функция token_get_all). Затем эти лексемы анализируются и в зависимости от значения подменяются их именования. По мере обработки кода может формироваться специальный массив исключений - какие функции, переменные и константы не нужно переименовать по каким-либо причинам. Также массивы с правилами исключений могут быть добавлены вручную в настройках обфускатора. В итоге при замене имён должны быть учтены все исключения и будет получен необходимый уровень обфускации. Обфускация в языке JS производится аналогично, но необходимо разработать и использовать свой лексический анализатор языка для выборки конкретных типов конструкции языка. Для HTML, CSS обфускация обычно будет подразумевать переименовывание названия классов в непонятный вид.
Для запутывания в код могут быть вставлены бессмысленные участки мусорного кода. Вообще эта тема обширна и при должном подходе может быть реализован качественный обфускатор, после применения которого деобфускация будет почти невозможна. Для этого можно прибегнуть к различным изощрениям. Но для большинства проектов возможно будет достаточно базовой обфускации - что будет служить сигналом для добросовестных пользователей, что вскрывать Ваш код не разрешено.
Минимизация кода может быть применена как следующий этап защиты кода. Она подразумевает удаление всех пробелов и переносов строк там, где это уместно и не навредит работе кода. На выходе будет получен компактный код, который уже сложен в понимании при простом открытии в редакторе. Кроме того, минимизация (или минификация) уменьшает размер файла с кодом, что благоприятно сказывается на скорости загрузки и обработки таких файлов. Этот этап применим к различным средствам разработки: к PHP, JS, HTML, CSS и т.д.
Сжатие или шифрование кода - может быть применено как последний этап защиты. Сжатие может быть выполнено встроенными средствами языка программирования, например, в PHP есть функция base64_encode и обратная base64_decode. Но антивирусы из-за этого могут ошибочно принимать Ваш код за заражённый и будут приходить уведомления от хостера (замечено на некоторых хостингах, например, с антивирусом Virusdie на reg.ru). Согласитесь, такой проект тяжелее распространять, если пользователь будет видеть предупреждения о вирусах, пусть даже ложные. Поэтому можно реализовать собственные средства сжатия или шифрования. Данный этап также актуален для всех средств разработки.
Часто могут использоваться готовые инструменты для обфускации и защиты кода, но их распространенность является уязвимостью, так как к популярным обфускаторам существуют такие же деобфускаторы. Поэтому следует использовать собственные разработки для большей защиты.
Обратные действия - деобфускация, деминимизация, распаковка и расшифровка. Деобфускация хотя и позволит получить исходный код, но он не будет восстановлен в первоначальный вид - со всеми пробелами и переносами как в оригинале, а также с исходными именами переменных и функций. А значит, это будет уже другой код, он не будет являться копией оригинала.
Стоит ли делать обфускацию - да, если необходимо скрыть исходный код. Но итоговый уровень защищённости будет зависеть от того, как реализована обфускация. На данном ресурсе реализован сервис обфускации - воспользоваться им можно бесплатно онлайн по ссылке "Обфускатор и минификатор проекта онлайн (PHP, JS, CSS, HTML)". Его особенность в том, что можно загрузить и обфусцировать весь проект, выбрать нужные настройки, задать исключения и т.д.
Последние статьи
- 03.04.24ИТ / Уроки PHP Уроки простыми словами. Урок 3. Все операторы PHP с примерами, с выводом работы кода на экран.
- 02.04.24ИТ / Уроки PHP Уроки простыми словами. Урок 2. Типы данных в PHP с примерами.
- 02.04.24ИТ / Уроки PHP Уроки простыми словами. Урок 1. Коротко о языке веб-программирования PHP. Основы синтаксиса.
- 09.11.23ИТ / Базы данных Ошибки при переходе с MySQL 5.6 на 5.7 и как их исправить - импорт дампа БД завершился ошибкой или не работает INSERT. Отключение строгого режима STRICT_TRANS_TABLES или использование IGNORE
- 08.07.22ИТ / Разное Конвертация офисных файлов DOC, DOCX, DOCM, RTF в форматы DOCX, DOCM, DOC, RTF, PDF, HTML, XML, TXT без потерь и изменения разметки