MCP数据脱敏应用开发
一、概述
数据脱敏(Data Masking),又称数据漂白、数据去隐私化或数据变形。
定义
指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。
脱敏规则
可以包括但不限于:
替换:例如将身份证号的部分数字替换为“*”或随机数。
随机化:例如生成与真实数据格式相符但与原始数据无关的新数据。
固定模式脱敏:例如保留电话号码的区号和最后几位,其余部分替换。
加密:对数据进行不可逆或可逆加密,仅在必要时解密。
假名化:用虚构的名字替换真实姓名。
二、数据脱敏开发
这里直接使用python代码开发,使用fastmcp框架。
server.py
from fastmcp import FastMCP
import re mcp = FastMCP("desensitize", port=9000) class DataMasker:
def __init__(self):
pass def mask_phone_number(self, phone_number):
"""
对手机号码进行脱敏处理,将中间四位替换为 *
"""
if len(phone_number) == 11:
return phone_number[:3] + "****" + phone_number[7:]
return phone_number def mask_email(self, email):
"""
对邮箱地址进行脱敏处理,只显示邮箱名前两位和域名
"""
if "@" in email:
username, domain = email.split("@")
return username[:2] + "****@" + domain
return email def mask_id_card(self, id_card):
"""
对身份证号码进行脱敏处理,只显示前四位和后四位
"""
if len(id_card) == 18:
return id_card[:4] + "**********" + id_card[14:]
return id_card def mask_address(self, address):
"""
对地址进行脱敏处理,模糊化门牌号和房间号
例如,将 "1栋" 替换为 "**栋","101室" 替换为 "***室"
"""
# 使用正则表达式
desensitized_address = re.sub(r"(\d+)栋", r"**栋", address)
desensitized_address = re.sub(r"(\d+)室", r"***室", desensitized_address)
return desensitized_address @mcp.tool()
def desensitize_text(text: str) -> str:
"""
脱敏文本信息
"""
masker = DataMasker()
# 匹配手机号
phone_pattern = r"\d{11}"
phones = re.findall(phone_pattern, text)
for phone in phones:
masked_phone = masker.mask_phone_number(phone)
text = text.replace(phone, masked_phone) # 匹配邮箱
email_pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
emails = re.findall(email_pattern, text)
for email in emails:
masked_email = masker.mask_email(email)
text = text.replace(email, masked_email) # 匹配身份证号
id_card_pattern = r"\d{18}"
id_cards = re.findall(id_card_pattern, text)
for id_card in id_cards:
masked_id_card = masker.mask_id_card(id_card)
text = text.replace(id_card, masked_id_card) # 匹配地址
address_pattern = r"([\u4e00-\u9fa5]+省)?([\u4e00-\u9fa5]+市)?([\u4e00-\u9fa5]+区)?([\u4e00-\u9fa5]+街道)?(\d+[\u4e00-\u9fa5]+)?(\d+[\u4e00-\u9fa5]+)?"
addresss = re.findall(address_pattern, text) # 如果没有找到地址,返回原始文本
if not addresss:
return text # 对每个匹配的地址进行脱敏处理
for address_parts in addresss:
# 将匹配的地址部分组合成完整的地址
address = "".join([part for part in address_parts if part])
if address:
# print("address",address)
masked_address = masker.mask_address(address)
text = text.replace(address, masked_address) return text if __name__ == "__main__":
mcp.run(transport="sse")
运行代码
python3 server.py
三、数据脱敏测试
打开Cherry Studio客户端,添加MCP服务器

添加智能体

将智能体添加到助手
开启MCP

聊天窗口,输入用户信息:
我的手机号是13812345678,我的邮箱是test@example.com,我的身份证号是123456789012345678,我的地址是北京市海淀区中关村大街1栋101室

可以看到返回的json,已经做了脱敏处理。
但是客户端返回的信息,有点不全。这是因为AI模型做了处理。因为AI模型认为这些敏感信息返回不安全,做了2次加工。
不过不影响,最终结果还是做了数据脱敏处理即可。
MCP数据脱敏应用开发的更多相关文章
- Oracle 11g数据脱敏
Oracle 11g数据脱敏 前言 最近开发人员有个需求,导一份生产库的数据到测试库. 由于生产数据安全需要,需要并允许对导出的数据进行加密脱敏处理. 关于加密和脱敏 个人理解, 加密是通过一系列规则 ...
- Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)
大家好!我是小富- 这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这 ...
- SpringBoot进阶教程(七十五)数据脱敏
无论对于什么业务来说,用户数据信息的安全性无疑都是非常重要的.尤其是在数字经济大火背景下,数据的安全性就显得更加重要.数据脱敏可以分为两个部分,一个是DB层面,防止DB数据泄露,暴露用户信息:一个是接 ...
- 微软Connect(); 2017大会梳理:Azure、数据、AI开发工具
在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲. 在开场视频中霍金又来了.你记 ...
- 《MySQL Workbench数据建模与开发》
<MySQL Workbench数据建模与开发> 基本信息 原书名:MySQL Workbench:Data Modeling & Development 原出版社: McGraw ...
- java 数据脱敏
所谓数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份 ...
- Oracle汉字用户名数据脱敏长度不变,rpad函数使用
信息安全考虑,有时需要对用户名称进行数据脱敏. 针对Oracle数据库,进行取数数据脱敏处理 脱敏规则: 长度小于9个字符,只保留前3个汉字与后3个汉字,中间全部由*填充. 长度9个字及以上及奇数,隐 ...
- php 数据脱敏显示
/** * 数据脱敏 * @param $string 需要脱敏值 * @param int $start 开始 * @param int $length 结束 * @param string $re ...
- 聚合数据 iOS 项目开发实战:条码查询器
记录下,聚合数据 iOS 项目开发实战:条码查询器:视频地址:http://www.jikexueyuan.com/course/324.html 条码查询API:https://www.juhe.c ...
- Azure、数据、AI开发工具
Azure.数据.AI开发工具 在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲 ...
随机推荐
- oracle使用存储过程返回游标实现报表查询
最近在oracle中通过存储过程实现一个报表查询,查询涉及到数据计算这里使用了临时表和存储过程实现输出查询,java接受游标变量返回结果集 第一步.创建统计使用的临时表 CREATE GLOBAL T ...
- linux--notepad++安装
通过PPA进行安装notepad++ sudo add-apt-repository ppa:notepadqq-team/notepadqq sudo apt-get update sudo a ...
- Idea无法下载插件或下载插件报错
Plugin Python was not installed: Cannot download 'https://plugins.jetbrains. file -> settings -& ...
- 本地部署 DeepSeek:小白也能轻松搞定!
大家好,我是晓凡. 写在前面 最近DeepSeek太火了,以至于每个小伙伴都想试试.DeepSeek 的到来可谓是开启了全民AI热潮. 本以为DeepSeek本地化部署有多难,实际上验证后很简单,操作 ...
- Python 合并 Excel 单元格
合并 Excel 单元格是 Excel 数据处理和表格设计中的一项常用操作.例如,在制作表格标题时,经常会将多个单元格合并,使标题能够跨列显示,更加醒目和美观.此外,当对数据进行分类时,为了使同一类别 ...
- 你还不会使用curl发送请求吗?一篇博客搞定!
前言:以下均为Windows使用,使用前不需要任何准备,打开命令提示符根据指令即可使用关键字: curl 注意: 建议在请求前ping一下 ping http://www.123.com 或 ping ...
- jQuery validate验证表单隐藏域
function validInfoForm(){ return $("#form_password").validate({ ignore : ...
- Java基础常见知识、面试题总结 (上)
Java语言有哪些特点 简单易学: 面向对象(封装,继承,多态): 平台无关性( Java 虚拟机实现平台无关性): 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来 ...
- Spark - [01] 概述
一.Spark是什么 Spark 是一种基于内存的快速.通用.可扩展的大数据分析引擎. Apache Spark is a unified analytics engine for large-sca ...
- verilator书写C++版模块testbench
默认顶层模型名称为top,环境名称为contextp const std::unique_ptr<VerilatedContext> contextp{new VerilatedConte ...