muffin/obfuscate

CakePHP 支持对 ID 混淆

安装量: 3,527

依赖: 0

建议者: 0

安全: 0

星标: 36

关注者: 7

分支: 11

类型:cakephp-plugin

3.0.1 2023-09-27 03:13 UTC

This package is auto-updated.

Last update: 2024-08-27 05:15:44 UTC


README

Build Status Coverage Status Total Downloads License

使用 HashIds、Optimus、Base62 以及/或自定义混淆策略对 CakePHP 进行主键混淆。

安装

使用 Composer 安装此插件

composer require muffin/obfuscate

通过以下控制台命令加载插件

bin/cake plugin load Muffin/Obfuscate

或者手动将以下行添加到 src/Application.php

$this->addPlugin('Muffin/Obfuscate');

最后,根据您要使用的策略类安装所需的混淆库,如下所述。

内置混淆策略

如果您想使用 HashIdStrategy

  • 对主键进行混淆,生成短、唯一、非顺序的 ID
  • 将记录 ID 如 347 表示为字符串如 "yr8"
composer require hashids/hashids

如果您想使用 OptimusStrategy

  • 对主键进行混淆,基于 Knuth 整数哈希的整数
  • 将记录 ID 如 347 表示为整数如 372555994
composer require jenssegers/optimus

如果您想使用 Base62Strategy

  • 使用 base62 字符串和整数混淆主键
  • 将记录 ID 如 347 表示为字符串如 "vk"
composer require tuupola/base62

您还可以通过实现 StrategyInterface 创建自己的策略类。

用法

1. 附加行为

通过将 Obfuscate 行为附加到您的表并指定要使用的策略来准备混淆,如下例所示。

use Muffin\Obfuscate\Model\Behavior\Strategy\HashIdStrategy;

$this->addBehavior('Muffin/Obfuscate.Obfuscate', [
    // Strategy constructor parameter:
    // $salt - Random alpha numeric string. You can also set "Obfuscate.salt"
    // $minLength (optional) - The minimum hash length. Default: 0
    // $alphabet (optional) - Custom alphabet to generate hash from. Default: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
    // config instead of passing salt to construction.
    // DO NOT USE same salt as set for "Security.salt" config.
    'strategy' => new HashIdStrategy('5SX0TEjkR1mLOw8Gvq2VyJxIFhgCAYidrclDWaM3so9bfzZpuUenKtP74QNH6B', 10, 'abcdefghijklmnopqrstuvwxyz')
]);
use Muffin\Obfuscate\Model\Behavior\Strategy\OptimusStrategy;

$this->addBehavior('Muffin/Obfuscate.Obfuscate', [
    // Strategy constructor parameters:
    // $prime - Large prime number lower than 2147483647
    // $inverse - The inverse prime so that (PRIME * INVERSE) & MAXID == 1
    // $random - A large random integer lower than 2147483647
    // You can use vendor/bin/optimus spark to generate these set of numbers.
    'strategy' => new OptimusStrategy(2123809381, 1885413229, 146808189)
]);
use Muffin\Obfuscate\Model\Behavior\Strategy\Base62Strategy;

$this->addBehavior('Muffin/Obfuscate.Obfuscate', [
    // Strategy constructor parameters:
    // $set - Random alpha-numeric set where each character must only be used exactly once
    'strategy' => new Base62Strategy('5SX0TEjkR1mLOw8Gvq2VyJxIFhgCAYidrclDWaM3so9bfzZpuUenKtP74QNH6B')
]);

请注意,附加行为是绝对无侵入的,直到您使用自定义查找器之一之前,它将不会做任何事情。

2. 使用自定义查找器

此插件附带以下两个自定义查找器,负责实际的混淆(伪装)和解密(揭示)过程

  • findObfuscated:用于使用混淆(伪装)的主键查找记录
  • findObfuscate:用于混淆(伪装)查找结果集中的所有主键

findObfuscated

如果您想使用混淆 id 查找记录,请使用此查找器。插件将揭示(揭示)混淆 id,并使用“常规”主键执行查找,如它在您的数据库中使用的那样。

CakePHP 示例

public function view($id)
{
    $article = $this->Articles->find('obfuscated')
        ->where(['id' => $id]) // For e.g. if value for $id is 'S' it will search for actual id 1
        ->first();
}

Crud 插件示例

public function view($id)
{
    $this->Crud->on('beforeFind', function (EventInterface $event) {
        $event->subject()->query->find('obfuscated');
    });
}

findObfuscate

如果您想让插件混淆查找结果集中找到的所有“常规”主键,请使用此查找器。

CakePHP 示例

public function index()
{
    $articles = $this->Articles->find('obfuscate');
}

Crud 插件示例

public function index()
{
    $this->Crud->on('beforePaginate', function (EventInterface $event) {
        $event->subject()->query->find('obfuscate');
    });
}

方法

附加行为还使表上有以下两个方法可用

  • obfuscate(string $str)
  • elucidate(string $str)

技巧

身份验证

一个相当常见的用例是将混淆应用于用户 id。为了确保 Authentication 插件正确处理混淆 id,请在您的 标识符解析器 配置中使用 obfuscated 查找器。

补丁和功能

  • 分支
  • 修改、修复
  • 测试 - 这很重要,所以它不会意外损坏
  • 提交 - 不要修改许可证、todo、版本等。(如果您更改了它们,请将它们放入自己的提交中,这样我在拉取时可以忽略它们)
  • 拉取请求 - 主题分支的加分项

为了确保您的 PR 被考虑纳入上游,您必须遵循 CakePHP 编码规范

错误和反馈

http://github.com/usemuffin/obfuscate/issues

许可证

版权所有(c)2015-至今,Use Muffin,并许可于MIT 许可证下。