Ні для кого не секрет, що питання захисту свого php-скрипта рано чи пізно постає перед будь-яким розробником і сьогодні я покажу як просто і ефективно захистити свій Скіпт на практичному прикладі - на простенькому модулі для DLE.
Як то давно я навскидку написав простий модуль виведення інформації про аттачменті в будь-якому місці сайту - ShowAttach, але до розуму модулів не довів і публікувати його не став. Ось цей модуль і візьмемо за основу для захисту.
Так само нам знадобляться прямі руки і система PCP-CS від Олега Mofsy.
Що таке pcp-cs
PCP-CS - PHP Code Protect Client-Server. Іншими словами клієнт-серверний додаток для прив'язки скриптів до певних обмежень (домен, ip сервера і т.д.).
Дуже спрощена схема виглядає так:
Установка і настройка серверної частини PCP-CS
Оскільки на момент написання статті вбудована админка системи не досить функціональна, я буду використовувати сторонню адмінку. написану спеціально для цієї системи.
Настройку можна проводити як на хостингу, так і на локальній машині. Для локалки рекомендую OpenServer.
1. Беремо з гітхаба адмінку по кнопці "Download ZIP". Вона вже містить останню версію серверної частини pcp-cs, так що на даному етапі більше нічого не потрібно.
2. Розпаковуємо папку upload в корінь.
3. Виконуємо запит з sql.sql. Якщо необхідно відразу завести користувача, то виконуємо запит:
логін і пароль в цьому випадки будуть admin, admin
4. Налаштовуємо конфиг в трьох файлах:
admin / config / db_config.php - Конфиг БД
admin / config / config.php - Конфиг адмінки
api / config.php - Конфиг pcp-cs
Такий поділ обумовлено незалежністю адмінки від серверної частини pcp-cs.
5. Все!
Адінка готова до роботи. Можна приступати до захисту піддослідного модуля.
Впровадження клієнтської частини
Перш за все необхідно налаштувати серверну частину.
Для цього створюємо новий метод перевірки даних.
після успішного створення методу йдемо в розділ "Ліцензії" і додає новий ліцензійний ключ.
В результаті отримуємо ліцезіонний ключ, який в подальшому можна віддавати покупцеві модуля.
Ось тепер можна впроваджувати безпосередньо код клієнта!
Зараз наш піддослідний зразок модуля (до речі не рекомендую його використовувати на живих проет тому що він не допрацьований як слід і буде викликати підвищення навантаження на бд) виглядає так:
Ось такий зовнішній вигляд виведення даних цим модулем:
Нам необхідно заблокувати роботу скрипта, якщо він використовується без ліцензії.
Для початку додамо в конфіг модуля параметр key, в який будемо передавати отриманий ліцензійний ключ.
і завернём робочий код в умова з перевіркою цього параметра, а так же додамо окрема умова для виведення повідомлення про відсутність ключа.
Додаємо в рядок підключення ключ і перевіряємо:
Тепер потрібно додати перевірку введеного ключа за допомогою pcp-cs.
Впроваджуємо код клієнта в наш модуль. Для економії ресурсів рекомендую стиснути код клієнтського класу через будь-який зручний інструмент. Я використовував сервіс PHP-Minifier. Вставляємо отриманий код перед основним кодом модуля. Якщо при перевірці видає помилку:
просто видаліть цей код:
Трохи доробок в умовах:
Якщо все зроблено правильно - файл з ліцензією буде успішно створений в потрібній папці, скрипт буде працювати. а в адмінці PCP-CS з'явиться запис про те, де активований ключ.
Для перевірки спробуйте змінити дані ліцензійного ключа в рядку підключення.
Ось, власне, і вся процедура реалізації захисту модуля. Залишається тільки закодувати код модуля в IonCube і можна продавати або роздавати безкоштовно.
Так само не забувайте, що найкраще реалізувати в модулі можливість кешування і перевіряти ліцензію за відсутності кеша модуля, так економляться ресурси хостингу і прискорюється робота.
Після всіх дій код модуля повинен виглядати як то так:
Як доповнення