Опенкарт і безпека: як налаштувати opencart щоб він не став ціллю злочинців
Чому важливо підготувати захист свого інтернет магазину на opencart?
Перше і основне - це захист інформації, якщо зловмисник отримає доступ до бази даних тоді він зможе завантажити всю інформацію про вашиї клієнтів та їх замовлення і як наслідок злити її або шантажувати вас. Отримавши доступ до файлів злочинець може налаштувати пересилання частини або встього вашого трафіку на свої потреби, заразити сусідні сайти, отримати доступ до платіжних даних та ін. Тобто ситуація максимально небезпечна для власника веб-сайту.
Як небезпечний код може потрапити до opencart?
Зачасту це встановлення нулених модулів, шаблонів з варезу та недобросовісний розробник. В інших випадках вірус/шкідливий код може потрапити від сусіднього сайту якщо в одному акаунті декілька сайтів і якийсь з них був зламаний. Старі версії опенкарту та невірне налаштування конфігу хостингу/сервера.
Міри для забезпечення безпеки
Шлях до каталогу admin
Зміна каталогу узебпечить адміністративний модуль від спроб отримати доступ. Для початку змініть назву каталогу admin на manager, panel або back. Назва залежить віл польоту вашою фантазії:) Потім відкрийте файл admin/config.php та змініть властивіть константи DIR_APPLICATION
, тобто переіменуйте /admin на нову назву.
.htaccess & .htpasswd
Basic авторизація додасть труднощів для доступу в каталог адміністратора. Якщо ви викоритовуєте хостиг або сервер з панелью тоді ви можете це зробити через віб-інтерфейс, знайшовши пункт "Захищена папка" або "Пароль на каталог". Якщо ні, тоді створіть в каталозі адміністратора 2 файла .htaccess та .htpasswd. В файл .htaccess помістіть наступний текст:
AuthType Basic AuthName "Password Protected Area" AuthUserFile .htpasswd Require valid-user
А у файл .htpasswd:
admin:$apr1$dvjb3lg0$OrzzuepaUhppDnnSz9p6e0
Тобто "логін:пароль" (md5), в цьрму прикладі логін та пароль admin/admin. Або скористайтесь генератором пари для .htpasswd
Захист catalog та system правилом в .htaccess
Перейдіть у каталог /catalog та створіть файл .htaccess із настпним правилом:
<FilesMatch "\.(php|twig|txt)$"> Order Deny,Allow Deny from all Allow from "your ip address" </FilesMatch>
Це заборонить доступ до php, twig та txt файлів з ip адреси яка не в вказана як дозволена.
В каталозі system правило має невелику відмінність:
<Files *.*> Order Deny,Allow Deny from all Allow from "your ip address" </Files>
Права на файли та каталоги
chmod 0755 або 0777 image/
chmod 0755 або 0777 image/cache/
chmod 0755 або 0777 (storage)cache/
chmod 0755 або 0777 (storage)download/
chmod 0644 або 0444 config.php
chmod 0644 або 0444 index.php
chmod 0644 або 0444 admin/config.php
chmod 0644 або 0444 admin/index.php
chmod 0644 або 0444 system/startup.php
Ідеальним варіантом буде рекурсивне встановлення прав 0644 на всі файли php.
Небезпечні функції
Існує ряд небезпечних функії які можуть бути використанні зловмисником для отримання інформації або ініціалізації шкідливого коду, перелік потенційно небезпечних функції:
exec() - виклик зовнішньої програми
proc_open() - виконує команду та відкриває файловий покажчик для введення/виводу
shell_exec() - виконує команду в оболонці/shell і повертає повний висновок у вигляді рядка
system() - виклик зовнішньої програми та виведення результату
passthru() - виклик зовнішньої програми та виведення "сирих" результату
popen() - відкриває файловий покажчик процесу
show_source() - виведення вихідного тексту поточної веб-сторінки
disk_free_space() - отримати розмір доступного простору в каталозі
diskfreespace() - псевдонім функції disk_free_space
disk_total_space() - повертає загальний розмір диска
eval() - обчислює рядок, заданий у параметрі як код PHP
fileperms() - отримати інформацію про права на файл
fopen() - відкриває файл або URL
opendir() - повертає дескриптор каталогу для подальшого використання з функціями closedir(), readdir() та rewinddir()
phpinfo() - виводить всю інформацію про PHP, ОС
phpversion() - виводить версію php
posix_getpwuid() - повертає інформацію про користувача щодо його user id
posix_getgrgid() - повертає інформацію про групу за її group id
posix_uname() - отримує системне ім'я, повертає хеш рядків з інформацією про систему
php_uname - повертає інформацію про ОС, де php був побудований
ini_get() - набуває значення опції конфігурації
ini_get_all() - отримує всі опції конфігурації
parse_ini_file() - розбирає файл конфігурації
На практиці мінімальний набір складається exec,passthru,php_uname,popen,proc_open,shell_exec,show_source та system. Щоб відключити ці функції, відкрийте файл php.ini та додайте рядок:
disable_functions = exec,passthru,php_uname,popen,proc_open,shell_exec,show_source,system
Якщо ви використовуєте хостинг - перейдіть до налаштуваннь php та знайдіть пункт disable_functions, де ви можете перевірити та додати ці параметри.
Модулі та шаблони
Будьте максимально уважні при встановленні модулів або шаблонів, якщо модуль завантажено із складчини то ризик схопити вірус виростає в рази.
Закрийте зовнішній доступ до бази даних
Opencart заражений вірусом: що робити?
Якщо є можливість - відкатіть бекап і починайте шукати вразливість, в першу черегу перевірте модифікатори, таблицю модифціторів та папку upload.
Якщо можливості немає або це не доцільно через втрату інформації, тоді першим кроком потрібно зачистити всі зараженні файли. Зазвичай для пошуку вже заражений файлів млжна використати скрипт ai-bolt.php. Він чудово виконує свою функцію, також є маса інших бібліотек для пошуку заражених файлів. Посилання на git. Розпакуйте його в корінь сайту, встановіть пароль та запустіть. Після сканування буде доступний список всіх файлів які мають шкідливий та підозрілий код.
Щоб знайти файли, які нещодавно редагувались через ssh увійдіть в консоль та виконайте команду:
find /home/user/public_html -type f -mtime -7
де, вказано наступне:
/home/user/public_html
- шлях до директорії, в якій ви хочете здійснити пошук файлів.-type f
- вказує, що потрібно шукати лише файли, а не директорії.-mtime -n
- параметр, що вказує на те, що файли, які були змінені менше ніж7
днів тому, повинні бути відображені.
Весь знайдений шкідливий код потрібно видалити. Якщо були пошкодженні системні файли - перезапишіть їх із бекапу або завантажте opencart вашої версії та використайте їх.
Після лікування магазину потрібно виконати перевірку модулів та скриптів які могли спричинити зараження. Можливо це навіть сусід по хсотингу, тому бажано сайт перенести в інший хсотинг акаунт.
Обов'язково змініть всі паролі від бд до адміністратороів.