maxlcoder/laravel-desensitization

敏感信息处理

Installs: 18

Dependents: 0

Suggesters: 0

Security: 0

Stars: 3

Watchers: 1

Forks: 0

Open Issues: 0

pkg:composer/maxlcoder/laravel-desensitization

dev-main 2025-12-29 03:00 UTC

This package is auto-updated.

Last update: 2025-12-29 03:00:39 UTC


README

Latest Version on Packagist Total Downloads GitHub Actions

针对 API 的敏感数据处理的中间键,配置形式,脱敏函数和脱敏方法均可高度自定义

Installation

You can install the package via composer:

composer require maxlcoder/laravel-desensitization

Config

php artisan vendor:publish --provider="Maxlcoder\LaravelDesensitization\LaravelDesensitizationServiceProvider"
  • functions: 脱敏使用的全局辅助函数,例如 'mobile' => 'desensitiseMobile',使用全局辅助函数 desensitiseMobile 对 uris 中配置的 type 为 mobile 类型的 key 做执行脱敏
  • class: 全局自定义脱敏类, name 表示类的全路径,这里只能填字符串,functions 表示自定义脱敏类中不同类型对应的脱敏方法
  • functions 和 class 优先使用 functions 全局辅助函数,当全局辅助函数没有指定,才使用全局自定义脱敏类 class . 如果二者均没有配置,则不处理脱敏,但是会有 error 日志提示
  • uris: 全局需要进行脱敏的接口,以及接口返回中需要脱敏的字段名和脱敏类型,系统会对返回的数据结构做解析,并进行迭代脱敏,其中数组 * 表示返回的数据是数组
[
    'functions' => [
        'mobile' => 'desensitise_mobile',
        'name' => 'desensitise_name'
    ],
    'class' => [
        'name' => 'App\Lib\Desensitization',
        'functions' => [
            'mobile' => 'desensitiseMobile',
        ],
    ],
    'uris' => [
        'admin/admins' => [
            ['key' => 'data.data.*.mobile', 'type' => 'mobile'],
            ['key' => 'data.data.*.name', 'type' => 'name'],
        ],
    ],
];

Usage

Kerner.php 中引入中间件

protected $routeMiddleware = [
        ...
        
        'desensitization' => \Maxlcoder\LaravelDesensitization\Http\Middleware\Desensitization::class,
    ];

Example

  1. 示例接口 admin/admins, 脱敏前返回结果
{
    "code": 200,
    "msg": "success",
    "data": {
        "mobile": "18900000001",
        "contacts": [
            {
                "name": "王组闲",
                "mobile": "18900000002"
            }
        ]
    }
}
  1. 配置 修改文件 config/laravel-desensitization.php
<?php

/*
 * You can place your custom package configuration in here.
 *
 */
return [
    'functions' => [

    ],
    'class' => [
        'name' => 'App\Lib\Desensitization',
        'functions' => [
            'name' => 'desensitiseRealName',
            'mobile' => 'desensitiseMobile'
        ],
    ],
    'uris' => [
        'admin/admins' => [
            ['key' => 'data.mobile', 'type' => 'mobile'],
            ['key' => 'data.contacts.*.name', 'type' => 'name'],
            ['key' => 'data.contacts.*.mobile', 'type' => 'mobile'],
        ],
    ],
];

其中自定义脱敏类 Desensitization.php 中定义的脱敏方法分别是

<?php

namespace App\Lib;

use Illuminate\Support\Str;

class Desensitization
{
    public static function desensitiseMobile($mobile)
    {
        return mb_substr($mobile, 0, 3) . '****' . mb_substr($mobile, 7, 4);
    }

    public static function desensitiseName($name)
    {
        return Str::mask($name, '*', 0, 1);

    }
}
  1. 接口脱敏结果
{
    "code": 200,
    "msg": "success",
    "data": {
        "mobile": "189****0001",
        "contacts": [
            {
                "name": "*组闲",
                "mobile": "189****0002"
            }
        ]
    }
}

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email liurenlin77@gmail.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

Laravel Package Boilerplate

This package was generated using the Laravel Package Boilerplate.