30. 脱敏处理
版本说明
以下内容仅限 Furion 2.4.4 +
版本使用。
30.1 关于脱敏
引用百度百科:
数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。数据安全技术之一,数据库安全技术主要包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。
在 Furion
系统中,脱敏处理
指的是对不符合系统合法词汇检测验证。
30.2 如何使用
Furion
框架内置了一套默认的脱敏词汇脱敏处理机制,并且提供自定义操作。
30.2.1 注册 脱敏词汇检测
服务
public void ConfigureServices(IServiceCollection services)
{
services.AddSensitiveDetection();
}
30.2.2 创建 sensitive-words.txt
文件
在 Web
启动层项目中创建 sensitive-words.txt
文件,确保采用 UTF-8
编码格式且设置为嵌入式资源!🎃
sensitive-words.txt
内容格式为每一行标识一个脱敏词汇:
坏人
无语
滚开
八嘎
接下来设置为嵌入式资源:
30.2.3 使用脱敏检测
- 实现数据验证脱敏检测
[SensitiveDetection]
Furion
框架提供了 [SensitiveDetection]
验证特性,可以对参数、属性进行脱敏验证,用法和 [DataValidation]
一致,如:
// 在属性中使用
public class Content
{
[SensitiveDetection]
public string Text { get; set; }
}
// 在 动态API/Controller 中使用
public void Test([SensitiveDetection] string text)
{
}
- 通过
ISensitiveDetectionProvider
服务使用
Furion
框架也提供了 ISensitiveDetectionProvider
服务进行手动脱敏验证处理,如:
public class FurionService
{
private readonly ISensitiveDetectionProvider _sensitiveDetectionProvider;
public FurionService(ISensitiveDetectionProvider sensitiveDetectionProvider)
{
_sensitiveDetectionProvider = sensitiveDetectionProvider;
}
/// <summary>
/// 获取所有脱敏词汇
/// </summary>
/// <returns></returns>
public async Task<IEnumerable<string>> GetWordsAsync()
{
return await _sensitiveDetectionProvider.GetWordsAsync();
}
/// <summary>
/// 判断是否是正常的词汇
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public async Task<bool> VaildedAsync(string text)
{
return await _sensitiveDetectionProvider.VaildedAsync(text);
}
/// <summary>
/// 替换非正常词汇
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public async Task<string> ReplaceAsync(string text)
{
return await _sensitiveDetectionProvider.ReplaceAsync(text, '*');
}
}
30.2.3 脱敏词汇替换
Furion
框架也提供了替换脱敏词汇的特性支持,如:
// 在属性中使用
public class Content
{
[SensitiveDetection('*')]
public string Text { get; set; }
}
特别注意
Furion
框架目前只提供类中使用替换特性支持,但未提供方法单个值替换支持,如以下代码不受支持:
public void Test([SensitiveDetection('*')] string text)
{
}
30.3 自定义脱敏词汇处理
Furion
框架除了内置了一套默认的 脱敏处理
程序,也支持自定义脱敏处理程序。
30.3.1 自定义 ISensitiveDetectionProvider
程序,如:
/// <summary>
/// 自定义脱敏词汇检测器
/// </summary>
public class YourSensitiveDetectionProvider : ISensitiveDetectionProvider
{
// 支持构造函数注入
public YourSensitiveDetectionProvider()
{
}
/// <summary>
/// 返回所有脱敏词汇
/// </summary>
/// <returns></returns>
public async Task<IEnumerable<string>> GetWordsAsync()
{
// 这里写你脱敏词汇数据的来源(如从数据库读取),建议做好缓存操作
}
/// <summary>
/// 判断脱敏词汇是否有效
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public async Task<bool> VaildedAsync(string text)
{
// 这里写你如何判断是正常的字符,返回 true 正常,返回 false 表示是个脱敏词汇
}
/// <summary>
/// 替换脱敏词汇
/// </summary>
/// <param name="text"></param>
/// <param name="transfer"></param>
/// <returns></returns>
public async Task<string> ReplaceAsync(string text, char transfer = '*')
{
// 这里写你替换非正常字符为指定字符
}
}
30.3.2 注册自定义脱敏提供器
public void ConfigureServices(IServiceCollection services)
{
services.AddSensitiveDetection<YourSensitiveDetectionProvider>();
}
之后系统将自动采用自定义的方式进行脱敏处理。
30.4 反馈与建议
与我们交流
给 Furion 提 Issue。