Немного слов защите DLE
Пару месяцев назад я залил несколько сайтов на VPS, все с актуальной версией DLE 18,0. Сторонних плагинов почти не ставил. Неделю назад перестала открываться главная страница ещё закрытого сайта, оказалось её код был изменен. Проверил ещё несколько файлов и папок - таких файлов было изменено очень много. Касательно даже обычной защиты DLE я давно уже ничего не делал, и более 5 лет всё было хорошо, и не было никаких вирусов на сайтах. В общем решил вспомнить способы защиты DLE, конечно они не спасут на все 100% от взлома, но взломщиков будет меньше вариантов сделать злодеяние. Т.к. обновить в кратце, чтоб потом не забывать это делать всегда и на всех сайтах...
В общем теперь по порядку.
- Подмена admin.php. Открываете форму входа в админку, открываете исходный код и копируете его в admin.php, предварительно скопировав оригинал admin.php и переименовав его в любое название, которое будет сложно подобрать.
- Правильные CHMOD. Тут всё просто:
* на файлы - 0644,
* на папки - 0755,
* на все htaccess - 0444,
* на все файлы в папке engine/data/* - 0444 (после полной настройки DLE),
* define('PLUGINS_READ_ONLY', true) - после настройки плагинов, рекомендуется закрыть возможность создавать/править плагины через адмнку DLE.
На первые три пункта можно запустить файл chmod.php (тестировался на php 8.1/8.3), создав его в корне сайта со содержимым:
В engine/data/* - вручную изменить права CHMOD после настройки сайта.<?php declare(strict_types=1); /** * Рекурсивно изменяет права доступа для файлов и директорий */ function chmodRecursive(string $path, array $perms): void { if (!is_dir($path)) { throw new InvalidArgumentException("Path {$path} is not a directory"); } $handle = opendir($path); if ($handle === false) { throw new RuntimeException("Failed to open directory {$path}"); } try { while (($file = readdir($handle)) !== false) { if ($file === '.' || $file === '..') { continue; } $fullPath = $path . '/' . $file; if (is_file($fullPath)) { // Особые права для .htaccess if ($file === '.htaccess') { chmod($fullPath, 0444); } else { chmod($fullPath, $perms['f']); } } elseif (is_dir($fullPath)) { chmod($fullPath, $perms['d']); chmodRecursive($fullPath, $perms); } } } finally { closedir($handle); } } try { // Получаем путь из параметра 'path' в query string parse_str($_SERVER['QUERY_STRING'] ?? '', $queryParams); $path = $queryParams['path'] ?? ''; // Если путь не передан, используем текущую директорию if ($path === '') { $path = getcwd() ?: __DIR__; } // Нормализуем путь $path = realpath($path); if ($path === false) { throw new InvalidArgumentException("Path does not exist or is inaccessible"); } // Устанавливаем права $perms = [ 'f' => 0644, // стандартные права для файлов 'd' => 0755 // стандартные права для директорий ]; chmodRecursive($path, $perms); echo "Permissions successfully updated for: " . htmlspecialchars($path, ENT_QUOTES, 'UTF-8'); echo "\nAll .htaccess files set to 0444"; } catch (Throwable $e) { http_response_code(500); echo 'Error: ' . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8'); exit(1); }
- Не использовать сомнительные "чистые" версии DLE, об это я писал ещё почти 5 лет назад, но люди всё равно там качают, а потом жалуются что их сайт взломали из-за использования null версии и какой то вирус они поймали. Кстати, когда я после той статьи написал им комментарий с доказательствами, что они вшивают левый код в DLE - меня по IP сразу навечно заблокировали 😀. Но и другие сайты так же распространяют такие грязные релизы, поэтому нужно либо их использовать на свой "страх и риск", либо качать из проверенных источников, которые никогда не были замечены за подобной гадостью.
- Всегда по возможности нужно использовать актуальную версию DLE. Понятное дело, что после настройки всех модулей/плагинов, после обновления на новую версию, скорее всего придётся и модули/плагины обновлять, что не всегда.
- Ну и само собой разумеющиеся - использовать пароли "!V+3/-O}xj8/Ha", которые будет невозможно подобрать.
Вроде бы и что нужно делать - не так и много, но постоянно думается - "пронесет" и всё будет нормально, но не всегда так бывает. Тем более если у вас не выделенный сервер, а VPS или шаред хостинг - всегда есть вероятность что "соседи" могут напакостить.
Ну и напоследок прикрепляю файлы, которые были залиты на сайт - может кому то будет интересно в них покопаться. Всего 247 файлов как измененных, так и созданных...😯
[attachment=254:files.zip]