nomelodic/file-system-security

该库会创建项目文件系统的快照并计算校验和。

0.3 2021-01-28 19:44 UTC

This package is auto-updated.

Last update: 2024-09-29 05:56:17 UTC


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 | includeMergeexclude | 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 callable - 在遍历完成后调用的函数。接收两个参数:$status$diff

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

$status bool - 返回校验和检查的结果。

$diff array - 如果检查结果为 false,则返回已更改的文件列表。

方法

使用两个方法

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          // Размер в байтах
            ],
        ]
    ]
]

不希望内容的解析

字符串 - 输入。目前用以下标记表示

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

字符串 字符串 - 包含输入的文件中的字符串部分

偏移量 整数 - 从文件开始处的偏移量(在检查时,所有制表符和换行符都替换为空格,然后所有重复的空格都缩减为一个空格)