nomelodic/file-system-security 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

nomelodic/file-system-security

Composer 安装命令:

composer require nomelodic/file-system-security

包简介

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

README 文档

README

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

nomelodic/file-system-security 适用场景与选型建议

nomelodic/file-system-security 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 13 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 01 月 25 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 nomelodic/file-system-security 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 nomelodic/file-system-security 我们能提供哪些服务?
定制开发 / 二次开发

基于 nomelodic/file-system-security 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 13
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 4
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-01-25