yupmin/magoo

PHP 库,用于隐藏(编辑)信用卡号、电子邮件等。

3.0.0 2022-10-18 06:20 UTC

This package is auto-updated.

Last update: 2024-09-16 04:26:22 UTC


README

Testing

原始包 pachico/magoo 已弃用。此版本适用于php 7.4、8.0、8.1、8.2、8.3

Magoo 是一个 PHP 库,用于在字符串中隐藏敏感数据。内置的隐藏功能使用正则表达式查找信用卡号、电子邮件等,并只隐藏这些内容,保留字符串的其他部分。例如,这可以用于记录敏感的用户输入。

您还可以隐藏与您自己的正则表达式匹配的字符串,或者注入隐藏类,只要它们实现了一个简单的接口。

多维数组也可以被隐藏,并且可以使用它来隐藏符合 PSR-3 规范的日志库,如 Monolog。

您可以通过 issues 页面请求实现隐藏。

目录

安装

通过 Composer

composer require pachico/magoo

用法

通用

这是库的通用用法。

use Pachico\Magoo\Magoo;

$magoo = new Magoo();
$magoo->pushCreditCardMask()
    ->pushEmailMask()
    ->pushByRegexMask('/(email)+/m');

$mySensitiveString = 'My email is roy@trenneman.com and my credit card is 6011792594656742';

echo $magoo->getMasked($mySensitiveString);

// 'My ***** is ***@trenneman.com and my credit card is ************6742'

隐藏信用卡号

信用卡号隐藏接受自定义替换。

use Pachico\Magoo\Magoo;

$magoo = new Magoo();
$magoo->pushCreditCardMask('·');

$mySensitiveString = 'This is my credit card number: 4111 1111 1111 1111.';

echo $magoo->getMasked($mySensitiveString);

// This is my credit card number: ······1111.

隐藏电子邮件

电子邮件隐藏接受可选参数,用于替换本地和域部分。

use Pachico\Magoo\Magoo;

$magoo = new Magoo();
$magoo->pushEmailMask('$', '*');

$mySensitiveString = 'My email is pachicodev@gmail.com but I need privacy.';

echo $magoo->getMasked($mySensitiveString);

// My email is $$$$$$$$$$@********* but I need privacy.

通过正则表达式隐藏

正则表达式隐藏将匹配项替换为与每个匹配项一样长的字符串。它需要一个正则表达式,并接受自定义替换。

use Pachico\Magoo\Magoo;

$magoo = new Magoo();
$magoo->pushByRegexMask('(\d+)', '_');

$mySensitiveString = 'My telephone number is 639.639.639. Call me at 19:00!';

echo $magoo->getMasked($mySensitiveString);

// My telephone number is ___.___.___. Call me at __:__!

重置

您可能希望在应用程序中使用相同的 Magoo 实例,但每次不使用相同的隐藏。您可以通过使用 reset() 方法在任何时间重置所有隐藏。

use Pachico\Magoo\Magoo;

$magoo = new Magoo();
$magoo->pushCreditCardMask()->pushByRegexMask('(\d+)', '_');

$mySensitiveString = 'My CC is 4111 1111 1111 1111 and my telephone number is 639.639.639.';

echo $magoo->getMasked($mySensitiveString);

// My CC is ************____ and my telephone number is ___.___.___.

$magoo->reset();

echo $magoo->getMasked($mySensitiveString);

// My CC is 4111 1111 1111 1111 and my telephone number is 639.639.639.

自定义隐藏

此外,您还可以添加自己的隐藏,只要它实现了 Maskinterface。

use Pachico\Magoo\Magoo;

class FooMask implements \Pachico\Magoo\Mask\MaskInterface
{
    protected $replacement = '*';

    public function __construct(array $params = [])
    {
        if (isset($params['replacement']) && is_string($params['replacement'])) {
            $this->replacement = $params['replacement'];
        }
    }

    public function mask($string)
    {
        return str_replace('foo', $this->replacement, $string);
    }
}
$magoo = new Magoo();
$customMask = new FooMask(['replacement' => 'bar']);
$magoo->pushMask($customMask);

$mySensitiveString = 'It is time to go to the foo.';

echo $magoo->getMasked($mySensitiveString);

// It is time to go to the bar.

隐藏数组

Magoo 包括一个方便的方法来隐藏多维数组,这在例如日志记录上下文中可能很有用。

use Pachico\Magoo\Magoo;
use Pachico\Magoo\MagooArray;

$magoo =new Magoo();
$magoo->pushByRegexMask('(foo)', 'bar');
$magooArray = new MagooArray($magoo);

$mySensitiveArray = [
    'It is time to go to the foo.',
    [
        'It is never too late to go the foo.'
    ],
    new DateTime()
];

$magooArray->getMasked($mySensitiveArray);

输出

Array
(
    [0] => It is time to go to the bar.
    [1] => Array
        (
            [0] => It is never too late to go the bar.
        )

    [2] => DateTime Object
        (
            [date] => 2020-08-21 11:44:33.000000
            [timezone_type] => 3
            [timezone] => UTC
        )

)

##隐藏 PSR-3 日志记录器 您还可以将 Magoo 用作符合 PSR-3 规范的日志记录器的包装器。在这个例子中,我们使用了 Monolog。

use Pachico\Magoo\Magoo;
use Pachico\Magoo\MagooLogger;
use Monolog\Logger;
use Monolog\Handler\ErrorLogHandler;

$magoo = new Magoo();
$magoo->pushByRegexMask('(foo)', 'bar');

$logger = new Logger('app');
$handler = new ErrorLogHandler();
$logger->pushHandler($handler);
$magooLogger = new MagooLogger($logger, $magoo);

$mySensitiveString = 'It is time to go to the foo.';

$magooLogger->warning($mySensitiveString);

// [2020-08-20 15:54:34] app.WARNING: It is time to go to the bar. [] []

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

测试

$ composer test

贡献

请参阅 CONTRIBUTINGCONDUCT 了解详细信息。

安全性

如果您发现任何与安全相关的问题,请通过电子邮件发送至 pachicodev@gmail.com,而不是使用问题跟踪器。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。

帮助

请报告您可能发现的任何错误,并/或合作开发您自己的隐藏。