豆包bot需对身份证号和银行卡号实时脱敏:服务端用字符串截取掩码法,flink sql流式动态脱敏,前端javascript运行时掩码,确保明文不残留于日志、调试、展示或下游系统。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果豆包Bot在对话交互中接收到用户输入的身份证号或银行卡号,需在日志记录、调试输出、前端展示或下游系统传递前立即执行实时脱敏,防止明文敏感信息残留。以下是实现该目标的多种技术路径:
一、服务端字符串截取掩码法
该方法基于固定长度规则进行子串提取与拼接,在不依赖正则引擎的前提下完成高效、低开销的脱敏,适用于Java、Python、Go等主流后端语言,规避回溯风险且兼容异常格式输入。
1、对身份证号:先校验字符串长度是否为18位,若满足则取前6位 + “****” + 后4位;若为15位旧版,则取前4位 + “****” + 后3位;其余长度直接原样返回不处理。
2、对银行卡号:先过滤非数字字符,再判断纯数字长度是否≥10;若满足,则取前6位 + 动态数量星号(长度−10) + 后4位;若不足10位,不脱敏并标记为可疑输入。
3、将脱敏逻辑封装为独立工具函数,禁止在HTTP日志打印、异常堆栈、监控指标值中写入原始字段,仅允许脱敏后字符串进入可审计日志通道。
二、Flink SQL流式动态脱敏
当豆包Bot接入实时消息队列(如Pulsar/Kafka)并将用户输入作为事件流接入Flink作业时,可在SQL层实施无状态、低延迟的字段级脱敏,确保所有下游消费者(如风控、审计、BI)仅接触已处理数据。
1、定义源表结构,包含user_id、raw_input(STRING)、input_type(STRING)等字段。
2、使用CASE WHEN区分input_type:若为'id_card'且LENGTH(raw_input) = 18,则CONCAT(SUBSTRING(raw_input,1,6),'****',SUBSTRING(raw_input,15,4));若为'bank_card',则CONCAT(SUBSTRING(raw_input,1,6),REPEAT('*',CHAR_LENGTH(raw_input)-10),SUBSTRING(raw_input,CHAR_LENGTH(raw_input)-3,4))。
3、将脱敏结果写入下游Kafka Topic或OLAP存储,原始raw_input字段不参与任何INSERT/SELECT输出。
使用豆包(火山引擎 Ark)生成图片或视频并保存本地。用户提及“豆包生图/图片/生视频/视频”、“Doubao”、“Seedance”、“火山引擎图片/视频”时触发。
三、前端JavaScript运行时掩码
在用户尚未提交但已在输入框中键入敏感内容时,通过监听input事件触发即时视觉脱敏,避免明文在DOM中完整呈现,降低截图、录屏或DevTools意外泄露风险。
1、为身份证输入框绑定oninput事件处理器,获取当前value值。
2、使用正则/g模式全局替换所有连续数字为星号,但保留前3位与后4位数字可见(例如:value.replace(/(?
3、对银行卡号输入框启用相同逻辑,但调整为保留前6位与后4位,并在失去焦点(blur)时再次执行严格数字提纯与长度校验,防止粘贴进带空格或短横线的非法格式。
4、关键提示:该掩码仅作用于页面显示层,必须配合服务端二次脱敏,不可替代后端防护。
四、OCR识别后端实时遮蔽
当用户上传身份证图片供豆包Bot调用OCR识别时,原始图像可能含未脱敏文本,需在OCR结果结构化后立即对敏感字段执行不可逆掩码,并同步对图像中对应区域添加像素级马赛克覆盖,实现“文本+图像”双通道脱敏。
1、OCR服务返回JSON结果后,提取id_card、phone等字段,按服务端截取掩码法处理并存入脱敏结果字段。
2、调用图像处理模块,依据OCR返回的坐标信息(x, y, width, height),对身份证照片中姓名、身份证号、住址等区域绘制半透明黑色矩形覆盖。
3、将脱敏后的文本字段与打码后的图像URL一同返回给前端,原始OCR原文与原始图二进制数据在内存中立即释放,不落盘、不缓存、不入数据库。










