pachico/magoo

此包已被废弃,不再维护。未建议替代包。

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

2.2.0 2018-05-09 07:56 UTC

This package is auto-updated.

Last update: 2023-06-22 01:43:46 UTC


README

Build Status codecov.io Codacy Badge Codacy Badge Code Climate SensioLabsInsight

Magoo 是一个PHP库,可以隐藏字符串中的敏感数据。内置的掩码使用正则表达式查找信用卡号、电子邮件等,并将它们隐藏,同时保持字符串的其他部分不变。例如,这可能有助于记录敏感的用户输入。

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

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

您可以通过 问题 页面请求实现掩码。

目录

安装

通过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. [] []

变更日志

请参阅变更日志获取更多关于最近更改的信息。

测试

$ composer test

贡献

请参阅贡献指南行为准则获取详细信息。

安全

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

致谢

许可证

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

帮助

请报告您可能发现的任何错误,并/或与您自己的面具进行合作。