gbhorwood / redactem
JSON红action工具
Requires
- php: ^8.1
Requires (Dev)
- php-mock/php-mock-phpunit: ^2.7
- phpstan/phpstan: 1.10
- phpunit/phpunit: ^10.2
This package is auto-updated.
Last update: 2024-10-02 20:26:30 UTC
README
Redactem是一个PHP包,用于从JSON中删除值。如果您需要在将JSON字符串写入磁盘或数据库之前删除密码或信用卡号码,或任何由键或正则表达式识别的键/值对,Redactem可以做到这一点。
Redactem是为fruitbat studios/cloverhitch technologies/kludgetastic实现开发的内部使用工具。
安装
Redactem通过composer安装
composer require gbhorwood/redactem
然后,在您的脚本中,require和use
require __DIR__ . '/vendor/autoload.php'; use Gbhorwood\Redactem\Redact;
功能
Redactem可以找到并替换JSON中的值,使用选择的或默认的红action文本。替换可以在嵌套结构中的任意深度进行。存储为字符串的有效JSON也可以处理。
查找要红action的值可以通过键名、大小写敏感或不敏感,或者通过在值上对正则表达式进行匹配来完成。Redactem提供方便的方法来红action密码、信用卡号或电子邮件,但也允许您编写自己的规则集。
基本密码红action之前
{ "password": "redactme", "somearray": { "password": "redactme" }, "somestring": "{\"password\": \"redactme\"}" }
之后
{ "password": "*****", "somearray": { "password": "*****" }, "somestring": "{\"password\":\"*****\"}" }
红action密码
可以使用passwords()
方便方法进行密码红action
$redactedJson = \Gbhorwood\Redactem\Redact::passwords($originalJson);
此方法红action以下键值的所有值
pwd
pass
psswd
password
pwd_repeat
repeat_pwd
pass_repeat
repeat_pass
passwd_repeat
repeat_passwd
password_repeat
repeat_password
如果您有以不同于以下列出的键键入的密码数据,您可以使用byKey()
方法。
默认情况下,密码值用'*****
'(五个星号)替换。如果您想设置自定义红action文本,passwords()
可以将红action文本作为可选的第二参数。
$redactedJson = \Gbhorwood\Redactem\Redact::passwords($originalJson, 'REDACTED');
红action信用卡号
可以使用creditcards()
方便方法进行信用卡号红action
$redactedJson = \Gbhorwood\Redactem\Redact::creditcards($originalJson);
信用卡号通过匹配主要信用卡供应商的模式的正则表达式来识别。
信用卡值用与信用卡号长度相同的星号红action文本替换。如果您想设置自定义红action文本,creditcards()
可以将红action文本作为可选的第二参数。
$redactedJson = \Gbhorwood\Redactem\Redact::creditcards($originalJson, 'REDACTED');
红action电子邮件
可以使用emails()
方便方法进行电子邮件地址红action
$redactedJson = \Gbhorwood\Redactem\Redact::emails($originalJson);
使用PHP的filter_var()
函数和FILTER_VALIDATE_EMAIL
匹配电子邮件地址。
电子邮件值用部分红action的电子邮件替换,允许读者识别已经知道该电子邮件地址的人。例如,电子邮件地址gbhorwood@example.ca
将被红action为gb*****od@ex***le.ca
。如果您想设置自定义红action文本,emails()
可以将红action文本作为可选的第二参数。
$redactedJson = \Gbhorwood\Redactem\Redact::emails($originalJson, 'REDACTED');
通过键进行自定义红action
可以通过指定要红action的键值对来执行红action
$redactedJson = \Gbhorwood\Redactem\Redact::byKey($originalJson, 'somekey');
默认情况下,键被视为不区分大小写。如果您想启用大小写敏感,将true作为可选的第三个参数传递
$redactedJson = \Gbhorwood\Redactem\Redact::byKey($originalJson, 'SomeKey', true);
默认行为是用默认红action文本*****
(五个星号)红action值。可以提供自定义红action文本作为可选的第四个参数
$redactedJson = \Gbhorwood\Redactem\Redact::byKey($originalJson, 'somekey', true, 'REDACTED');
可以通过调用byKeys
并传递键数组来对多个键进行红action
$redactedJson = \Gbhorwood\Redactem\Redact::byKeys($originalJson, ['somekey', 'otherkey'], true, 'REDACTED');
byKeys
方法的行为与byKey
方法相同,唯一的区别是第二个参数是键数组。
使用正则表达式进行自定义红字
可以通过提供正则表达式来匹配要红字的价值
$redactedJson = \Gbhorwood\Redactem\Redact::byRegex($originalJson, '/someregex/');
提供给 byRegex()
的正则表达式使用 php 的 preg_match()
来与价值进行匹配。
默认行为是使用默认的红字文本 *****
(五个星号)来红字价值。可以作为可选的第三个参数提供自定义红字文本。
$redactedJson = \Gbhorwood\Redactem\Redact::byRegex($originalJson, '/someregex/', 'REDACTED');
编写自定义红字规则
可以通过使用基本函数 redact()
来自定义 Redactem 的行为。
redact()
函数接受三个参数
$json
要红字的一个 JSON 字符串$shouldRedact
一个可调用的函数,它接受两个参数,即要测试红字的键/值对的$key
和$value
,并返回一个布尔值。返回值为true
表示该值应该被红字。$redactionText
一个可调用的函数,它接受一个参数,即键/值对的$value
,并返回一个字符串。返回的字符串是用于替换值的红字文本。
一个用法示例是
/** * A function to test if a key/value pair should be redacted * Here, if the key is equal to 'secret' and the value is only digits. * @param String|Int $k The key of a key/value pair * @param String|Int $v The value of a key/value pair * @return bool */ $shouldRedact = fn ($k, $v) => (bool)($k == 'secret' && preg_match('/^[0-9]*$/', (string)$v)); /** * A function to build the redaction text for a value * Here, a string of exclamation marks the length of the string being redacted * @param String|Int $v The value of a key/value pair * @return String */ $redactionText = fn ($v) => join(array_fill(0, strlen((string)$v), '!')); $redactedJson = Redact::redact($originalJson, $shouldRedact, $redactionText);
此示例将接受类似以下 JSON 的输入
{ "name": "jasvinder", "secret": "astring", "somearray": { "secret": 1234 } }
并返回
{ "name": "jasvinder", "secret": "astring", "somearray": { "secret": "!!!!" } }