leocavalcante/redact-sensitive
Composer 安装命令:
composer require leocavalcante/redact-sensitive
包简介
Monolog processor to protect sensitive information from logging
README 文档
README
🙈 A Monolog processor that protects sensitive data from miss logging.
Avoids logging something like {"api_key":"mysupersecretapikey"} by masking partially or completely sensitive data:
Readme.INFO: Hello, World! {"api_key":"mysu***************"} []
Install
composer require leocavalcante/redact-sensitive
Usage
1. Prepare your sensitive keys
It is a map of key names and how much of it can be displayed, for example:
$sensitive_keys = [ 'api_key' => 4, ];
Shows the first 4 characters of the api_key.
If you want to display the last chars, you can use negative values like ['api_key' => -4], then it will display the last 4 characters.
2. Create a Processor using the keys
You can now create a new Processor with the given keys:
use RedactSensitive\RedactSensitiveProcessor; $sensitive_keys = ['api_key' => 4]; $processor = new RedactSensitiveProcessor($sensitive_keys);
3. Set the Processor to a Monolog\Logger
use RedactSensitive\RedactSensitiveProcessor; $sensitive_keys = ['api_key' => 4]; $processor = new RedactSensitiveProcessor($sensitive_keys); $logger = new \Monolog\Logger('Readme'); $logger->pushProcessor($processor);
Examples
use Monolog\Handler\StreamHandler; use RedactSensitive\RedactSensitiveProcessor; $sensitive_keys = ['api_key' => 4]; $processor = new RedactSensitiveProcessor($sensitive_keys); $logger = new \Monolog\Logger('Readme', [new StreamHandler(STDOUT)]); $logger->pushProcessor($processor); $logger->info('Hello, World!', ['api_key' => 'mysupersecretapikey']);
Readme.INFO: Hello, World! {"api_key":"mysu***************"} []
Completely hidden
You can hide it completely by passing 0 to the key.
use Monolog\Handler\StreamHandler; use RedactSensitive\RedactSensitiveProcessor; $sensitive_keys = ['you_know_nothing' => 0]; $processor = new RedactSensitiveProcessor($sensitive_keys); $logger = new \Monolog\Logger('Example', [new StreamHandler(STDOUT)]); $logger->pushProcessor($processor); $logger->info('Completely hidden', ['you_know_nothing' => 'John Snow']);
Example.INFO: Completely hidden {"you_know_nothing":"*********"} []
Custom format
Feel free to customize a replacement character * and/or provide your own template.
use Monolog\Handler\StreamHandler; use RedactSensitive\RedactSensitiveProcessor; $sensitive_keys = ['secret' => 2]; $processor = new RedactSensitiveProcessor($sensitive_keys, template: '%s(redacted)'); $logger = new \Monolog\Logger('Example', [new StreamHandler(STDOUT)]); $logger->pushProcessor($processor); $logger->info('Sensitive', ['secret' => 'my_secret_value']);
Example.INFO: Sensitive {"secret":"my*************(redacted)"} []
Custom template allows to discard the masked characters altogether:
use Monolog\Handler\StreamHandler; use RedactSensitive\RedactSensitiveProcessor; $sensitive_keys = ['secret' => 2]; $processor = new RedactSensitiveProcessor($sensitive_keys, template: '...'); $logger = new \Monolog\Logger('Example', [new StreamHandler(STDOUT)]); $logger->pushProcessor($processor); $logger->info('Sensitive', ['secret' => 'my_secret_value']);
Example.INFO: Sensitive {"secret":"my..."} []
Length limit
Use lengthLimit to truncate redacted sensitive information, such as lengthy tokens.
use Monolog\Handler\StreamHandler; use RedactSensitive\RedactSensitiveProcessor; $sensitive_keys = ['access_token' => 0]; $processor = new RedactSensitiveProcessor($sensitive_keys, lengthLimit: 5); $logger = new \Monolog\Logger('Example', [new StreamHandler(STDOUT)]); $logger->pushProcessor($processor); $logger->info('Truncated secret', ['access_token' => 'Very long JWT ...']);
Example.INFO: Truncated secret {"access_token":"*****"} []
Right to left
And, as said before, you can mask the value from right to left using negative values.
use Monolog\Handler\StreamHandler; use RedactSensitive\RedactSensitiveProcessor; $sensitive_keys = ['credit_card' => -4]; $processor = new RedactSensitiveProcessor($sensitive_keys); $logger = new \Monolog\Logger('Example', [new StreamHandler(STDOUT)]); $logger->pushProcessor($processor); $logger->info('You are not storing credit cards, right?', ['credit_card' => '4111111145551142']);
Example.INFO: You are not storing credit cards, right? {"credit_card":"************1142"} []
Nested values
It should work with nested objects and arrays as well.
use Monolog\Handler\StreamHandler; use RedactSensitive\RedactSensitiveProcessor; $sensitive_keys = [ 'nested' => [ 'arr' => [ 'value' => 3, 'or_obj' => ['secret' => -3], ], ] ]; $processor = new RedactSensitiveProcessor($sensitive_keys); $logger = new \Monolog\Logger('Example', [new StreamHandler(STDOUT)]); $logger->pushProcessor($processor); $nested_obj = new stdClass(); $nested_obj->secret = 'donttellanyone'; $logger->info('Nested', [ 'nested' => [ 'arr' => [ 'value' => 'abcdfg', 'or_obj' => $nested_obj, ], ], ]);
Example.INFO: Nested {"nested":{"arr":{"value":"abc***","or_obj":{"stdClass":{"secret":"***********one"}}}}} []
Thanks
Feel free to open any issues or PRs.
MIT © 2021
leocavalcante/redact-sensitive 适用场景与选型建议
leocavalcante/redact-sensitive 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 48.31k 次下载、GitHub Stars 达 34, 最近一次更新时间为 2021 年 06 月 17 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 leocavalcante/redact-sensitive 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 leocavalcante/redact-sensitive 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 48.31k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 34
- 点击次数: 26
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-06-17