PHPackages                             nomelodic/file-system-security - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. nomelodic/file-system-security

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

nomelodic/file-system-security
==============================

The library creates a snapshot of the project file system and calculates the checksum.

0.3(5y ago)013MITPHPPHP &gt;=7.0

Since Jan 25Pushed 5y ago1 watchersCompare

[ Source](https://github.com/nomelodic/file-system-security)[ Packagist](https://packagist.org/packages/nomelodic/file-system-security)[ RSS](/packages/nomelodic-file-system-security/feed)WikiDiscussions master Synced 4d ago

READMEChangelog (3)DependenciesVersions (4)Used By (0)

File System Security
====================

[](#file-system-security)

[![Packagist Version](https://camo.githubusercontent.com/26818de0f27c80be70e2de8c81def87a60033645a310c1eeb9a46682fd021414/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6e6f6d656c6f6469632f66696c652d73797374656d2d7365637572697479)](https://packagist.org/packages/nomelodic/file-system-security)

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

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

Установка
---------

[](#установка)

```
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-функция)

**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`:

[](#пример-возвращаемых-данных-в-массиве-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* - Смещение от начала файла *(при проверке все табуляции и переносы строк заменяются на пробелы, после чего все повторяющиеся пробелы сокращаются до одного)*

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity40

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

3

Last Release

1932d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/23def27d97ea4fe07473dda4819a3633e098cef7866216b7cd72153a0f9057cd?d=identicon)[nomelodic](/maintainers/nomelodic)

---

Top Contributors

[![nomelodic](https://avatars.githubusercontent.com/u/28806775?v=4)](https://github.com/nomelodic "nomelodic (12 commits)")

### Embed Badge

![Health badge](/badges/nomelodic-file-system-security/health.svg)

```
[![Health](https://phpackages.com/badges/nomelodic-file-system-security/health.svg)](https://phpackages.com/packages/nomelodic-file-system-security)
```

###  Alternatives

[lullabot/amp

A set of useful classes and utilities to convert html to AMP html (See https://www.ampproject.org/)

3802.9M10](/packages/lullabot-amp)[pragmarx/coollection

Laravel Illuminate collection with objectified properties

943.4M11](/packages/pragmarx-coollection)[valorin/random

Random is a simple helper package designed to make it easy to generate a range of different cryptographically secure random values.

228188.4k2](/packages/valorin-random)[pragmarx/ia-str

Laravel Illuminate Agnostic Str

523.5M5](/packages/pragmarx-ia-str)[sailenicolas/forceutf8

PHP Class Encoding featuring popular Encoding::toUTF8() function --formerly known as forceUTF8()-- that fixes mixed encoded strings.

53267.9k](/packages/sailenicolas-forceutf8)[prism-php/bedrock

A provider for Prism adding support for AWS Bedrock.

35116.8k1](/packages/prism-php-bedrock)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
