Блог Евгения Попова :: Программы :: DataLife Engine

Немного слов защите DLE

Пару месяцев назад я залил несколько сайтов на VPS, все с актуальной версией DLE 18,0. Сторонних плагинов почти не ставил. Неделю назад перестала открываться главная страница ещё закрытого сайта, оказалось её код был изменен. Проверил ещё несколько файлов и папок - таких файлов было изменено очень много. Касательно даже обычной защиты DLE я давно уже ничего не делал, и более 5 лет всё было хорошо, и не было никаких вирусов на сайтах. В общем решил вспомнить способы защиты DLE, конечно они не спасут на все 100% от взлома, но  взломщиков будет меньше вариантов сделать злодеяние. Т.к. обновить в кратце, чтоб потом не забывать это делать всегда и на всех сайтах...



В  общем теперь по порядку.

  1. Подмена admin.php. Открываете форму входа в админку, открываете исходный код и копируете его в admin.php, предварительно скопировав оригинал admin.php и переименовав его в любое название, которое будет сложно подобрать.
  2. Правильные CHMOD. Тут всё просто:
    * на файлы - 0644,
    * на папки - 0755,
    * на все htaccess - 0444,
    * на все файлы в папке engine/data/* - 0444 (после полной настройки DLE),
    * define('PLUGINS_READ_ONLY', true) - после настройки плагинов, рекомендуется закрыть возможность создавать/править плагины через адмнку DLE.
    На первые три пункта можно запустить файл chmod.php (тестировался на php 8.1/8.3), создав его в корне сайта со содержимым:
    <?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);
    }
    В engine/data/* - вручную изменить права CHMOD после настройки сайта.
  3. Не использовать сомнительные "чистые" версии DLE, об это я писал ещё почти 5 лет назад, но люди всё равно там качают, а потом жалуются что их сайт взломали из-за использования null версии и какой то вирус они поймали.  Кстати, когда я после той статьи написал им комментарий с доказательствами, что они вшивают левый код в DLE - меня по IP сразу навечно заблокировали 😀. Но и другие сайты так же распространяют такие грязные релизы, поэтому нужно либо их использовать на свой "страх и риск", либо качать из проверенных источников, которые никогда не были замечены за подобной гадостью.
  4. Всегда по возможности нужно использовать актуальную версию DLE. Понятное дело, что после настройки всех модулей/плагинов, после обновления на новую версию, скорее всего придётся и модули/плагины обновлять, что не всегда.
  5. Ну и само собой разумеющиеся - использовать пароли "!V+3/-O}xj8/Ha", которые будет невозможно подобрать.

Вроде бы и что нужно делать - не так и много, но постоянно думается - "пронесет" и всё будет нормально, но не всегда так бывает. Тем более если у вас не выделенный сервер, а VPS или шаред хостинг - всегда есть вероятность что "соседи" могут напакостить.

Ну и напоследок прикрепляю файлы, которые были залиты на сайт - может кому то будет интересно в них покопаться. Всего 247 файлов  как измененных, так и созданных...😯
[attachment=254:files.zip]

Перейти на сайт (скачивать файлы можно только на сайте)