Skip to content

nomelodic/text-helper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

File System Security

Packagist Version

Многие сайты подвергаются взлому, и очень часто владельцы сайтов узнают об этом не сразу. Безусловно, для избежания подобного необходимо обеспечить безопасность сайта должным образом, убирать все дыры, проверять входящие данные и т.д. Но далеко не всегда разработчику удаётся это сделать, т.к. в проектах очень часто используются пакеты, плагины, расширения и пр. подобные вещи сторонних разработчиков. Уязвимости могут быть в любом месте.

Библиотека создает слепок файловой системы проекта и считает контрольную сумму. Это необходимо для контроля несанкционированных изменений файлов веб-проекта. Суть работы скрипта очень проста: один инструмент сканирует систему и сохраняет информацию о её состоянии, после другой сканирует систему на наличие изменений, сравнивая состояние в момент проверки с сохраненным.

Установка

composer require nomelodic/file-system-security

Использование

Объявляем класс и передаем массив с настройками.

$security = new FilesSecurity([
    'baseDir' => __DIR__,
    'include' => ['f|*.php'],
    'includeMerge' => ['d|*.js'],
    'exclude' => ['f|sitemap.xml'],
    'excludeMerge' => ['d|vendor'],
    'callback' => function ($status, $diff) {
        /* Здесь выполняем необходимые действия */
    }
]);

Конфигурация

baseDir string required - Корневая директория проекта. Это та директория, внутри которой будет собираться список файлов.

Списки для обхода

include array - Массив со списком масок и названий файлов и папок, которые участвуют в обходе. Заменяет дефолтный список.

includeMerge array - Массив со списком масок и названий файлов и папок, которые участвуют в обходе. Объединяется с дефолтным списком.

exclude array - Массив со списком масок и названий файлов и папок, которые не участвуют в обходе. Заменяет дефолтный список.

excludeMerge array - Массив со списком масок и названий файлов и папок, которые не участвуют в обходе. Объединяется с дефолтным списком.

Обратите внимание! В парах include | includeMerge и exclude | excludeMerge указывается что-то одно, т.е. либо include, либо includeMerge и, соотвественно, либо exclude, либо excludeMerge.

По-умолчанию у класса есть дефолтные списки:

$include = ['f|*.php', 'f|*.html', 'f|.env', 'f|.htaccess', 'f|*.sh', 'f|*.bat'];
$exclude = ['d|.git', 'd|.idea', 'd|.buildpath', 'd|.project', 'd|.settings'];

Свои списки необходимо передавать в таком же виде. Каждый элемент списка состоит из двух частей, разделенных |: тип файла (f - файл или d - папка) и название файла (полное или маска). На данный момент маска принимает только *, т.е. не работает, как полноценное регулярное выражение.

Список файлов и папок, участвующих в обходе:

f|*.php     // Все файлы с расширением .php
f|*.html    // Все файлы с расширением .html
f|.env      // Все файлы с именем .env
f|.htaccess // Все файлы с именем .htaccess
f|*.sh      // Все файлы с расширением .sh
f|*.bat     // Все файлы с расширением .bat

Список файлов и папок, не участвующих в обходе:

d|.git       // Папка с именем .git и все дочерние элементы
d|.idea      // Папка с именем .idea и все дочерние элементы
d|.buildpath // Папка с именем .buildpath и все дочерние элементы
d|.project   // Папка с именем .project и все дочерние элементы
d|.settings  // Папка с именем .settings и все дочерние элементы

Callback-функция

callback callable - Функция, которая будет вызвана при завершении обхода. Принимает 2 параметра: $status и $diff.

function ($status, $diff) {
    /* Здесь выполняем необходимые действия */
}

$status bool - Возвращает результат проверки контрольной суммы.

$diff array - Возвращает список измененных файлов, если результат проверки false.

Методы

Для работы используются 2 метода:

scan void - Производит сканирование системы и сохраняет слепок. Вызов:

$security->scan();

По итогу обхода создает файл fs_checksum, в котором сохраняет состояние системы.

check array|callable - Проверяет систему на наличие изменений. Также дополнительно проверяет созданные и измененные файлы на наличие нежелательных вхождений. Вызов:

$security->check();

Если в настройках была передана функция callback, то выполнит её, иначе вернет ассоциативный массив с теми же параметрами, которые передаются в функцию:

[
    'status' => true|false, // Результат проверки контрольной суммы
    'diff'   => [...]       // Список измененных файлов
]

Пример возвращаемых данных в массиве $diff:

[
    'created'  => [ // Список созданных (новых) файлов
        'index.html' => [
            'new' => [ // Новые значения
                'modified' => 1611595416, // Время последнего изменения в UNIX-формате
                'size'     => 128832,     // Размер в байтах
                'warnings' => []          // Нежелательных вхождений не обнаружено
            ],
        ]
    ],
    'modified' => [ // Список измененных файлов
        'controllers/SiteController.php' => [
            'old' => [ // Старые значения
                'modified' => 1611591377, // Время последнего изменения в UNIX-формате
                'size'     => 47565       // Размер в байтах
            ],
            'new' => [ // Новые значения
                'modified' => 1611598416, // Время последнего изменения в UNIX-формате
                'size'     => 47832,      // Размер в байтах
                'warnings' => [           // Список нежелательных вхождений     
                    'key'    => 'file_put_contents',
                    'string' => '...nclude ], 'list' => $files ]; file_put_contents($this->getChecksumPath(), jso...'
                    'offset' => 1930
                ]
            ],
        ]
    ],
    'deleted'  => [ // Список удаленных файлов
        '.htaccess' => [
            'old' => [ // Старые значения
                'modified' => 1565950550, // Время последнего изменения в UNIX-формате
                'size'     => 84          // Размер в байтах
            ],
        ]
    ]
]

Расшифровка данных по нежелательным вхождениям:

key string - Вхождение. На данный момент обозначены:

private $warnings = [
    'exec',
    'chmod',
    'mkdir',
    'file_put_contents',
    'fwrite',
    '$GLOBAL',
    'base64_decode',
    'getenv',
    'set_time_limit',
    'rmdir',
    'mail',
    'curl_init',
    'header',
];

string string - Часть строки из файла, где найдено вхождение

offset int - Смещение от начала файла (при проверке все табуляции и переносы строк заменяются на пробелы, после чего все повторяющиеся пробелы сокращаются до одного)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages