nomelodic / file-system-security
该库会创建项目文件系统的快照并计算校验和。
Requires
- php: >=7.0
- ext-json: *
- ext-mbstring: *
This package is auto-updated.
Last update: 2024-09-29 05:56:17 UTC
README
许多网站都遭受了攻击,而且往往网站所有者不会立即得知。当然,为了避免这种情况,需要适当地确保网站的安全,修复所有漏洞,检查传入的数据等。但是,并非总是开发者能够做到这一点,因为在项目中经常使用第三方开发者的包、插件、扩展等类似的东西。漏洞可能存在于任何地方。
该库创建项目文件系统的快照并计算校验和。这是为了控制对网页项目文件的未授权更改。脚本的工作原理非常简单:一个工具扫描系统并保存其状态信息,另一个工具扫描系统以查找更改,比较检查时和保存的状态。
安装
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 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',
];
字符串 字符串 - 包含输入的文件中的字符串部分
偏移量 整数 - 从文件开始处的偏移量(在检查时,所有制表符和换行符都替换为空格,然后所有重复的空格都缩减为一个空格)