找回密码
 立即注册
首页 业界区 业界 MCP数据脱敏应用开发

MCP数据脱敏应用开发

邹语彤 5 天前
一、概述

数据脱敏(Data Masking),又称数据漂白、数据去隐私化或数据变形。 
定义

指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。
脱敏规则

可以包括但不限于:
替换:例如将身份证号的部分数字替换为“*”或随机数。
随机化:例如生成与真实数据格式相符但与原始数据无关的新数据。
固定模式脱敏:例如保留电话号码的区号和最后几位,其余部分替换。
加密:对数据进行不可逆或可逆加密,仅在必要时解密。
假名化:用虚构的名字替换真实姓名。


二、数据脱敏开发

这里直接使用python代码开发,使用fastmcp框架。
server.py
  1. from fastmcp import FastMCP
  2. import re
  3. mcp = FastMCP("desensitize", port=9000)
  4. class DataMasker:
  5.     def __init__(self):
  6.         pass
  7.     def mask_phone_number(self, phone_number):
  8.         """
  9.         对手机号码进行脱敏处理,将中间四位替换为 *
  10.         """
  11.         if len(phone_number) == 11:
  12.             return phone_number[:3] + "****" + phone_number[7:]
  13.         return phone_number
  14.     def mask_email(self, email):
  15.         """
  16.         对邮箱地址进行脱敏处理,只显示邮箱名前两位和域名
  17.         """
  18.         if "@" in email:
  19.             username, domain = email.split("@")
  20.             return username[:2] + "****@" + domain
  21.         return email
  22.     def mask_id_card(self, id_card):
  23.         """
  24.         对身份证号码进行脱敏处理,只显示前四位和后四位
  25.         """
  26.         if len(id_card) == 18:
  27.             return id_card[:4] + "**********" + id_card[14:]
  28.         return id_card
  29.     def mask_address(self, address):
  30.         """
  31.         对地址进行脱敏处理,模糊化门牌号和房间号
  32.         例如,将 "1栋" 替换为 "**栋","101室" 替换为 "***室"
  33.         """
  34.         # 使用正则表达式
  35.         desensitized_address = re.sub(r"(\d+)栋", r"**栋", address)
  36.         desensitized_address = re.sub(r"(\d+)室", r"***室", desensitized_address)
  37.         return desensitized_address
  38. @mcp.tool()
  39. def desensitize_text(text: str) -> str:
  40.     """
  41.     脱敏文本信息
  42.     """
  43.     masker = DataMasker()
  44.     # 匹配手机号
  45.     phone_pattern = r"\d{11}"
  46.     phones = re.findall(phone_pattern, text)
  47.     for phone in phones:
  48.         masked_phone = masker.mask_phone_number(phone)
  49.         text = text.replace(phone, masked_phone)
  50.     # 匹配邮箱
  51.     email_pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
  52.     emails = re.findall(email_pattern, text)
  53.     for email in emails:
  54.         masked_email = masker.mask_email(email)
  55.         text = text.replace(email, masked_email)
  56.     # 匹配身份证号
  57.     id_card_pattern = r"\d{18}"
  58.     id_cards = re.findall(id_card_pattern, text)
  59.     for id_card in id_cards:
  60.         masked_id_card = masker.mask_id_card(id_card)
  61.         text = text.replace(id_card, masked_id_card)
  62.     # 匹配地址
  63.     address_pattern = r"([\u4e00-\u9fa5]+省)?([\u4e00-\u9fa5]+市)?([\u4e00-\u9fa5]+区)?([\u4e00-\u9fa5]+街道)?(\d+[\u4e00-\u9fa5]+)?(\d+[\u4e00-\u9fa5]+)?"
  64.     addresss = re.findall(address_pattern, text)
  65.     # 如果没有找到地址,返回原始文本
  66.     if not addresss:
  67.         return text
  68.     # 对每个匹配的地址进行脱敏处理
  69.     for address_parts in addresss:
  70.         # 将匹配的地址部分组合成完整的地址
  71.         address = "".join([part for part in address_parts if part])
  72.         if address:
  73.             # print("address",address)
  74.             masked_address = masker.mask_address(address)
  75.             text = text.replace(address, masked_address)
  76.     return text
  77. if __name__ == "__main__":
  78.     mcp.run(transport="sse")
复制代码
 
运行代码
  1. python3 server.py
复制代码
 
三、数据脱敏测试

 打开Cherry Studio客户端,添加MCP服务器
1.png

 
添加智能体
2.png

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

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

 
可以看到返回的json,已经做了脱敏处理。
 
但是客户端返回的信息,有点不全。这是因为AI模型做了处理。因为AI模型认为这些敏感信息返回不安全,做了2次加工。
不过不影响,最终结果还是做了数据脱敏处理即可。
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册