yorcreative/laravel-scrubber

一个用于清除敏感信息的laravel扩展包。

v3.0.0 2024-04-19 01:45 UTC

README



Logo

Laravel Scrubber

GitHub license GitHub stars GitHub issues GitHub forks Packagist Downloads PHPUnit

Laravel扩展包,用于清除可能导致操作安全策略泄露的敏感信息,无论是由于开发者意外还是故意泄露。

安装

通过composer安装包

composer require yorcreative/laravel-scrubber

发布包资源。

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

配置

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

return [
    'redaction' => '**redacted**', // Define what you want to overwrite detected information with?
    'secret_manager' => [
        'key' => '44mfXzhGl4IiILZ844mfXzhGl4IiILZ8', // key for cipher to use
        'cipher' => 'AES-256-CBC', 
        'enabled' => false, // Do you want this enabled?
        'providers' => [
            'gitlab' => [
                'enabled' => false,
                'project_id' => env('GITLAB_PROJECT_ID', ''),
                'token' => env('GITLAB_TOKEN', ''),
                'host' => 'https://gitlab.com',
                'keys' => ['*'], // * will grab all the secrets, if you want specific variables
                                 //  define the keys in an array
            ],
        ],
    ],
    'regex_loader' => ['*'] // Opt-in to specific regex classes OR include all with * wildcard.
    'tap_channels' => ['*'] // Opt-in to tap specific log channels OR include all with * wildcard.
];

用法

清除器可以通过两种方式使用,第一种是日志清除器。添加了一个检测器来检测和清理任何敏感信息,防止其进入日志文件。第二种方式是将其集成到您的应用程序中,并直接使用清除器。这种方式特别有用,例如,如果您想在消息平台上检测和清理任何消息。

日志检测与清理

Log::info('some message', [
    'context' => 'accidental',
    'leak_of' => [
        'jwt' => '<insert jwt token here>'
    ]
])

// testing.INFO: some message {"context":"accidental","leak_of":{"jwt": '**redacted**'}} 

Log::info('<insert jwt token here>')

// testing.INFO: **redacted**  

直接用于检测与清理

Scrubber::processMessage([
    'context' => 'accidental',
    'leak_of' => [
        'jwt' => '<insert jwt token here>'
    ]
]);
// [
//     "context" => "accidental"
//     "leak_of" => [
//         "jwt" => "**redacted**"
//     ]
// ];

Scrubber::processMessage('<insert jwt token here>');
// **redacted**

日志通道选择

此包允许您通过配置文件定义要特别清理的通道。默认情况下,此包包含一个通配符值,并选择清理应用程序中的所有日志通道。

定义日志通道选择

要选择一个或多个通道,请在配置中的 tap_channels 数组中列出通道名称。

'tap_channels' => [
    'single',
    'papertrail'
]

要禁用检测器日志功能,并独立使用包而不检测Laravel应用程序的日志,请修改配置文件,如下设置 tap_channels 字段:

'tap_channels' => false

正则表达式类选择

您可以通过配置文件定义在应用启动时要加载到应用程序中的正则表达式类。默认情况下,此包包含一个通配符值。

正则表达式集合与定义选择

要选择,请使用 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
    ],

选择自定义扩展类

要创建自定义清除器,请参阅扩展清除器部分。

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

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

<?php

namespace App\Scrubber\RegexCollection;

use YorCreative\Scrubber\Interfaces\RegexCollectionInterface;

class TestRegex implements RegexCollectionInterface
{
    public function getPattern(): string
    {
        /**
         * @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
    {
        /**
         * @note return a string that can be used to verify the regex pattern provided.
         */
        return 'basic f9Iu+YwMiJEsQu/vBHlbUNZRkN/ihdB1sNTU';
    }
    
    public function getReplacementValue(): string
    {
        
        /**
         * @note return a string that replaces the regex pattern provided.
         */
        return config('scrubber.redaction');
    }

    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'
    ],

关于清除器

此包提供从外部源拉取机密的能力。提供检测信息泄露和清理机密的能力,无需精确的正则表达式模式来检测。

加密

为了增强应用程序的安全性,从任何提供者拉取的所有机密都被加密,并且在运行检测时才解密。您可以在这里看到这一点。

Gitlab集成

要使用Gitlab集成,您需要在配置文件中启用secret_managergitlab提供者。如果您想了解如何在Gitlab中添加机密,请参阅有关添加项目变量的文章。

扩展清除器

创建新的清除器检测类

php artisan make:regex-class {name} 

此命令将在App\Scrubber\RegexCollection中创建一个占位符类。Scrubber 包将自动加载 App\Scrubber\RegexCollection 文件夹中的所有内容,这是通过在 scrubber 配置文件中 regex_loader 数组上的通配符值实现的。您需要为该类提供 正则表达式模式可测试字符串,如果您想要用非配置文件中的默认值替换检测到的值,还可以提供 替换值

测试

composer test

致谢