响应体过滤是防止敏感数据在HTTP响应中意外暴露的关键手段,需在服务器层(如Nginx)、应用框架层(如Spring Boot)和WAF层分层实施,覆盖身份证号、手机号、银行卡号等敏感字段,并符合《个人信息保护法》等合规要求。

响应体过滤是防止敏感数据在HTTP响应中意外暴露的关键手段。它不是等数据出来再“打码”,而是从源头控制哪些内容该被记录、传输或展示。
明确需要过滤的敏感字段
先梳理业务中实际存在的敏感数据类型,比如:
- 身份证号(18位数字+字母组合)
- 手机号(11位,以1开头)
- 银行卡号(16–19位连续数字)
- 密码、API密钥、JWT令牌、session ID
- 姓名、住址、邮箱等PII(个人身份信息)
注意:不同国家/地区对敏感数据的定义可能不同,境内系统需优先适配《个人信息保护法》和《网络安全法》要求。
在Web服务器层配置响应体过滤
直接在Nginx、Apache或IIS等反向代理/服务器端做响应内容扫描与替换,效率高且不依赖应用代码。
- Nginx:使用sub_filter指令匹配并替换敏感内容(如
sub_filter "13812345678" "[PHONE]";),配合正则可批量处理 - Apache:启用
mod_substitute模块,用Substitute s/regex/replacement/gi实现动态脱敏 - IIS:通过
web.config配置outboundRules,对响应HTML/JSON进行关键词替换或移除
这类配置适合统一拦截通用格式(如手机号、身份证),但不建议用于加密或结构化数据(如JWT)的深度解析。
在应用框架内做结构化响应体过滤
当响应是JSON或XML时,更推荐在业务逻辑出口处做精准过滤,避免误伤正常内容。
- Ruby on Rails:使用
filter_parameters自动过滤params和response.body中的指定键名 - Spring Boot:通过
@JsonInclude(JsonInclude.Include.NON_NULL)或自定义ObjectMapper序列化器,在序列化前清除敏感字段 - Node.js(Express):用中间件检查
res.locals或res.body,调用脱敏工具函数后重写响应
关键点是:过滤动作应发生在响应生成之后、发送之前,且需覆盖所有输出路径(包括异常响应、健康检查接口等易被忽略的端点)。
借助WAF实现全站响应体防泄露
如果已有Web应用防火墙(WAF),可直接启用“防敏感信息泄露”功能,无需改代码。
- 支持识别身份证、手机号、银行卡号等标准格式,并提供多种动作:告警、全部替换、仅显示后四位、阻断响应
- 可按URL路径设置规则,例如只对
/api/v1/user/profile开启脱敏,避免影响静态资源 - 部分WAF支持正则自定义敏感词,适用于业务专属字段(如工号、内部订单号)
优势在于策略集中管理、生效快、可审计;缺点是无法理解业务语义,可能漏判或误判,建议与应用层过滤配合使用。
响应体过滤不是一次性开关,而是一套分层策略:服务器层兜底、应用层精准、WAF层统一管控。三者叠加,才能真正堵住敏感数据从后端流向前端的泄漏通道。


















