yorcreative/laravel-scanator

一个 Laravel 扩展包,提供检测数据库中敏感信息和模式的功能,通过允许开发者轻松地将数据库扫描功能集成到他们的应用程序中,并采取主动措施来保护敏感数据,从而帮助确保数据隐私和安全。

v1.0.0 2023-06-27 17:34 UTC

This package is not auto-updated.

Last update: 2024-09-16 20:44:40 UTC


README



Logo

Laravel Scanator

GitHub license GitHub stars GitHub issues GitHub forks PHPUnit

一个 Laravel 扩展包,提供检测数据库中敏感信息和模式的功能,通过允许开发者轻松地将数据库扫描功能集成到他们的应用程序中,并采取主动措施来保护敏感数据,从而帮助确保数据隐私和安全。

安装

使用 composer 安装此包

composer require yorcreative/laravel-scanator

发布资源。

php artisan vendor:publish --provider="YorCreative\Scanator\ScanatorServiceProvider"
php artisan vendor:publish --provider="YorCreative\Scanator\ScrubberServiceProvider"

配置

调整 Scanator 配置文件

调整位于 /config/scanator.php 的配置文件以适应您的应用程序。

return [
    'sql' => [
        'ignore_tables' => [
            'failed_jobs',
            'migrations'
        ],
        'ignore_columns' => [
            'id',
            'created_at',
            'updated_at'
        ],
        'ignore_types' => [
            'timestamp'
        ],
        'select' => [
            'low_limit' => 3,
            'high_limit' => 10
        ],
    ]
];

调整 Scrubber 配置文件

调整位于 /config/scrubber.phpregex_loader 字段以适应您的应用程序。有关 Scrubber 配置文件的更多信息,请参阅源文档 此处

return [
    ...
    'regex_loader' => ['*'], // Opt-in to specific regex classes OR include all with * wildcard.
    ...
];

用法

此包未附带实现。它作为工具提供,开发者可以根据应用程序的需求选择如何实现。

检测管理器

DetectionManager 类是 Laravel Scanator 扩展包的一个基本组件。它在扫描过程中管理和存储 检测。它提供了记录检测、检索检测列表和获取扫描开始时间的方法。

完整数据库扫描

此包提供分析并构建数据库模式的能力,然后扫描敏感信息,排除 Scanator 配置文件中的任何表、列或类型,最后返回 Detection Manager 类。

$detectionManager = Scanator::init();

$detections = $detectionManager->getDetections();

选择性数据库扫描

此包提供选择性扫描表的能力。

$detectionManager = new DetectionManager();

Scanator::analyze($detectionManager, 'table_name', ['columns', 'to', 'scan']);

$detections = $detectionManager->getDetections();

定义可排除的表

此包的配置文件提供定义可排除表的功能,允许您在扫描过程中排除它们。

 'ignore_tables' => [
    'failed_jobs',
    'migrations'
],

定义可排除的列

同样,您可以在配置文件中定义可排除的列,以防止包扫描它们。

'ignore_columns' => [
    'id',
    'created_at',
    'updated_at'
],

定义可排除的数据类型

为了进一步细化扫描过程,您可以在配置文件中指定可排除的数据类型。在扫描时,包将忽略这些数据类型。

 'ignore_types' => [
    'timestamp'
],

定义样本大小

为了更好地控制扫描过程,配置文件允许您定义从每个表提取的样本大小。

'select' => [
    'low_limit' => 3,
    'high_limit' => 10
],

Scrubber 文档

此包基于 scrubber 包提供的 RegexRepository。有关 scrubber 的完整文档,请参阅 此处

Regex 类启用

您可以通过 scrubber 配置文件定义在应用程序启动时要加载哪些正则表达式类。默认情况下,此包附带通配符值。

Regex 集合 & 定义启用

要启用,请使用 RegexCollection 类的静态属性。

 'regex_loader' => [
        RegexCollection::$GOOGLE_API,
        RegexCollection::$AUTHORIZATION_BEARER,
        RegexCollection::$CREDIT_CARD_AMERICAN_EXPRESS,
        RegexCollection::$CREDIT_CARD_DISCOVER,
        RegexCollection::$CREDIT_CARD_VISA,
        RegexCollection::$JSON_WEB_TOKEN
    ],

创建自定义扩展类

Scrubber 包附带一个用于创建自定义扩展类的命令,并允许进一步优化 Scanator 的数据库扫描。

php artisan make:regex-class {name} 

该命令将在 App\Scrubber\RegexCollection 中创建一个空类。Scrubber 包将从 App\Scrubber\RegexCollection 文件夹自动加载所有内容,并在 scrubber 配置文件中的 regex_loader 数组中使用通配符值。您需要为该类提供 正则表达式模式可测试字符串

选择自定义扩展类

regex_loader 数组接收字符串,而不是对象。要选择特定的自定义扩展正则表达式类,请将类名定义为字符串。

例如,如果我有一个自定义扩展类如下

<?php

namespace App\Scrubber\RegexCollection;

use YorCreative\Scrubber\Interfaces\RegexCollectionInterface;

class TestRegex implements RegexCollectionInterface
{
    public function getPattern(): string
    {
        /**
         * @todo
         * @note return a regex pattern to detect a specific piece of sensitive data.
         */
        return '(?<=basic) [a-zA-Z0-9=:\\+\/-]{5,100}';
    }

    public function getTestableString(): string
    {
        /**
         * @todo
         * @note return a string that can be used to verify the regex pattern provided.
         */
        return 'basic f9Iu+YwMiJEsQu/vBHlbUNZRkN/ihdB1sNTU';
    }

    public function isSecret(): bool
    {
        return false;
    }
}

regex_loader 数组应定义为如下

 'regex_loader' => [
        RegexCollection::$GOOGLE_API,
        RegexCollection::$AUTHORIZATION_BEARER,
        RegexCollection::$CREDIT_CARD_AMERICAN_EXPRESS,
        RegexCollection::$CREDIT_CARD_DISCOVER,
        RegexCollection::$CREDIT_CARD_VISA,
        RegexCollection::$JSON_WEB_TOKEN,
        'TestRegex'
    ],

测试

composer test

致谢