Несмотря на всю популярность php и его возможности он имеет один существенный недостаток. Это проблема защиты кода. Начинающих программистов php на стадии изучение и создания своих продуктов этот вопрос мало интересует. Вопрос защиты php кода возникает, когда программистам необходимо распространять свой продукт на php будь-то один класс или сложная система на коммерческой основе и при этом возникает риск, того что Ваш открытый php код представляет Вашим клиентам возможность не заплатить за Ваши труды или в дальнейшем беспрепятственно распостранять на коммерческой основе.
Чтобы избежать таких ситуаций и быть увереным, что никто не сможет без Вашего ведома и рарешения использовать Ваш php код в своих целях все начинают искать способы защиты и криптования php. Такие поиск приводит к основным доступным, и наверное, популярным, но не самым выгодным программам для защиты php.
Основная программа для защиты php кода это Zend Encoder/Zend Guard. Программа от разработчиков Zend PHP Company, основатели которой и создали ядро php. Другими словами разработчики php с одной стороны модернизируют и распостраняют бесплатно язык php, а с другой стороны предлагают воспользоваться программой Zend Encoder/Zend Guard для защиты кода на платной основе. Сегодня лицензия на этот продукт стоит $799 за 1 год использования.
Существуют, также, и еще много других продуктов других независимых разработчиков. Неплохо себя зарекомендовал и ionCube PHP Encoder. Для этого продукта существует 3 варианта лицензий, среди которых, базовая лицензия стоит $199 за 1 год использования для 1 машины (компьютера).
Помимо этих самых популярных платных продуктов есть еще целый ряд других, ознакомится с ними Вы можете поискав их в интернете. Вот наиболее широкий список предлагаемых продуктов по защите php кода с их кратким описанием, который я нашел.
Основными недостатками всех этих программ является:
- платность, как правило необходима ежегодная покупка лицензий. Хотя в стоимость и входит апгрейд и бесплатная поддержка.
- существование декодеров, способных расшифровать Ваш защищенный код. Например, для расшифрования Zend Encoder/Zend Guard существуют Zend Dencoder'ы (например, MMSCN Dezend или онлайн-сервис). В пользу ionCube PHP Encoder можно сказать, что публичных онлайн сервисов пока нет, да и программ для декодирования не найдено, но со временем, думаю появятся.
Основными действиями, которые выполняют енкодеры:
1. обфускация php кода - удаление всех необязательных лишних символов в скрипте, таких как пробелы, переносы строк и комментарии, что превращает код в одну сплошную строку. А также, самое основное это замена названий переменных и функций (в том числе внутри классов) на трудные для восприятия наборы символов, на пример такого вида: $_1_1_0, $_1_1_0_ или $_c2m4f6sk8 и по специальному алгоритму, цель которого затруднить восприятие.
2. в различной очередности криптование и шифрование кода различными алгоритмами n-количество раз. Однако, в большинстве одного программного обеспечения используеться похожая система, что и позволяет создавать декодеры.
Те, кто не хочет платить деньги за лицензии или сомневается в эффективности программ для защиты php кода пишут собственные кодировщики или используют распостраняемые классы слегка модифицируя их под свои уникальные алгоритмы. Зачастую используют base64-шифрование - когда произвольная последовательность байт преобразуется в последовательность печатных ASCII символов. Используется в основном для самостоятельного шифрование собственных предварительно обфусцированых скриптов. С помощью php это можно реализовать так:
$str='какой-то текст';
echo(base64_encode($str));
echo(base64_decode($str));
Ну и наконец, после краткого вступления, я подхожу к основной теме этой статьи. Это установка и использование bcompiler'а.
Bcompiler - это специальная библиотека/расширение для php позволяющая превратить php скрипт в байт код, который непосредственно читается и выполняется php-интерпретатором. Bcompiler это эксперементальное расширение для php, которое можно использовать на свой риск. На сайте php.net указывается, что использование bcompiler'а, как средство защиты php скриптов, делает практически невозможным как воссоздание кода в первичный вид, так и изменение его. Однако, все данные которые прописаны в скрипте, как значение переменных, конечно, можно вытянуть. Поэтому не рекомендуется хранить пароли и другую важную информацию.
Основные плюсы bcompiler'а это:
- бесплатное использование;
- увеличение скорости выполнение скриптов приблизительно на 30%;
- эффективная защита php кода. По крайней мере, в интернете Вы врядли, сходу найдете не то, чтоб информацию о востанновлении данных, а и о самом bcompiler'е, кроме официального сайта.
Когда я искал информацию о bcompiler, то у меня сложилось впечатление, что развитие этой библиотеки и ее возможностей логически невыгодно для Zend PHP Company, ведь фактически этот бесплатный енкодер может также успешно заменять платный Zend Encoder/Zend Guard.
Основные минусы bcompiler'а:
- подключение на хостинге к php библиотеки/расширение bcompiler.(so | dll). Однако для большинства хостеров это, впрочем, не проблема. Они позволяют в настройках хостинга самостоятельно подключить модули или делают это сами на Вашу просьбу.
- пока еще нет стабильной версии bcompiler'а. Эта библиотека в составе PECL официально находится на стадии beta-тестирования уже 8 лет.
Подключение и использование bcompiler'а.
Сперва необходимо подключить библиотеку bcompiler, как php расширение в виде модуля в файле php.ini.
В Windows Вам понадобится dll расширение, для этого скачайте этот файл php_bcompiler.dll (v0.9s). скопируйте его в папку /php/ext к остальным библиотекам и пропишите подключение в файле php.ini в месте, где подключаются другие модули следующую строку:
extension=php_bcompiler.dll
Если Вы используете UNIX-систему, то Вам необходимо скомпилировать расширение bcompiler с помощью PECL/PEAR. Компиляция bcompiler'а для Fedora:
yum install bzip2
yum install bzip2-libs
yum install bzip2-devel
yum install php
yum install php-devel
yum install php-pear
pear install bcompiler-beta
Теперь Вам необходимо найти подходящий хостинг, можно рассмотреть такие варианты:
1. найти хостинг на windows платформе, тогда можно легко подключить dll расширение;
2. найти хостинг на котором, у Вас будет возможность разместить/проводить свои сборки php;
3. хостер сам соберет php в составе bcompiler'а.
Для создания отдельного зашифрованого файла с байт кодом, необходимо использовать функции: bcompiler_write_file(), bcompiler_write_header() и bcompiler_write_footer(). Например:
$fh = fopen("test.phb", "w");
bcompiler_write_header($fh);
bcompiler_write_file($fh, "test.php"); //исходный файл для компиляции
bcompiler_write_footer($fh);
fclose($fh);
В результате мы получаем файл test.phb. Обратите внимание на расширение файла *.phb. Это стандартное понятное расширение для определения файлов обработаных bcompiler'ом. Это полноценные файлы, которые могут подключатся выполняться вместе с открытым кодом. Например:
...
$x = $b."str";
require_once('cfg.phb');
echo $x;
...
Файлы с байт кодом выполняются на одном уровне с обычным открытым кодом. Это значит что Вы можете обращаться к функциям, классам и хранить переменные. Использование bcompiler'а удобно для защиты не всего сайта вцелом, а только самых важных частей кода. и шифрования отдельно взятых классов.
Надеюсь эта статья про bcompiler. будет Вам полезна, особенно учитывая малое количество информации об этой библиотеке.