中转网关做请求内容脱敏,自动过滤手机号身份证等敏感信息

在日常接口中转场景里,上游接口可能接收到包含手机号、身份证号的明文请求。
与其逐个业务系统处理,不如在网关层统一做请求内容脱敏,让敏感信息在转发前就被规则替换掉。
本文以 OpenResty 为例,教你在中转网关里自动过滤手机号、身份证号等常见敏感信息,零基础也能照着配置并验证效果。

先确认环境:OpenResty 还是原生 Nginx

OpenResty 是基于 Nginx 的高性能 Web 平台,内置 Lua 解析能力,适合在网关层写灵活的请求处理逻辑。
执行 openresty -v 看是否已安装;
如果输出类似 openresty/1.21.4.1,说明环境可用。
纯 Nginx 没有 Lua 模块,要先安装 lua-nginx-module,更省事的做法是直接改用 OpenResty,或使用具备 Lua 扩展的网关产品。

准备脱敏规则:手机号和身份证的正则写法

先确定要过滤的敏感字段格式,以下正则覆盖了国内常见格式:

手机号:1[3-9]\d{9}
身份证:\d{17}[\dXx] 或 \d{15}

脱敏规则通常保留前几位和后几位,中间用星号代替。
例如手机号保留前 3 后 4,身份证保留前 4 后 4。
下面示例按此规则处理。

在 OpenResty 中配置请求体脱敏

在 OpenResty 的 nginx.conf 里添加一个 server 或 location,通过 Lua 脚本读取请求体、执行正则替换、再放行请求。
完整示例:

location /api/ {
    lua_need_request_body on;

    access_by_lua_block {
        local ngx_re = require("ngx.re")
        local body = ngx.req.get_body_data()

        if body then
            -- 手机号脱敏:保留前3后4
            body, _, _ = ngx_re.gsub(body, "(1[3-9]\\d{3})[0-9]{4}(\\d{4})", "$1****$2")
            -- 身份证脱敏:保留前4后4
            body, _, _ = ngx_re.gsub(body, "(\\d{4})[0-9]{9}[\\dXx](\\d{3}[\\dXx])", "$1**********$2")
            -- 重新写回请求体
            ngx.req.set_body_data(body)
        end
    }

    proxy_pass http://your_upstream;
}

注意 Lua 字符串中反斜杠需要转义,所以正则里的 \d 要写成 \\d。
如果请求体是 JSON,直接正则替换也能命中,但需要保证替换结果仍是合法 JSON。
若要更严谨,可先用 cjson 解析再逐字段处理,适合字段结构稳定的接口。

验证脱敏是否生效

配置完成后重载 OpenResty:openresty -s reload。
然后本地构造一个带敏感信息的 POST 请求:

curl -X POST http://your-gateway/api/test \
  -H "Content-Type: application/json" \
  -d '{"name":"张三","phone":"13812345678","idcard":"110101199001011234"}'

在 proxy_pass 指向的上游服务里打日志,或者用临时后端脚本打印收到的请求体,应看到 phone 变成 138**5678,idcard 变成 1101****1234。
如果没生效,先检查是否真的走了这个 location,以及请求体是否被 nginx 默认丢弃。

避坑指南:编码、性能与边界情况

使用这种方法时有几个坑要提前避开:

  • 请求体大小限制:默认 client_max_body_size 只有 1M,大请求需要调大,否则读取不到完整 body。
  • 中文编码问题:正则替换不会影响非 ASCII 字符,但如果请求体是 GBK 编码,建议先转成 UTF-8 再处理。
  • 性能影响:每个请求都做正则匹配会占用 CPU,建议只对需要脱敏的 location 开启,不要全局启用。
  • 只处理请求体,不处理 URL 参数:敏感信息如果出现在 query string 里,需要另行读取 $args 并替换。
  • 不要忽略响应脱敏:如果上游返回的数据同样包含敏感信息,可再用 body_filter_by_lua 做响应脱敏,但注意该阶段不能修改响应头和内容长度,需配合 ngx.arg[1] 处理分块数据。

另外,
如果使用 APISIX、
Kong 等商业或开源网关,
可以直接用现成的脱敏插件,
比如 APISIX 的 response-rewrite 配合自写 Lua 插件,
思路与上面一致,
但管理界面更友好。

建议你在上线前先用真实接口压测,确认脱敏规则不会误伤正常字符,并检查日志中是否出现原始敏感信息。
按本文配置完成后,你的中转网关就能在请求转发前自动过滤手机号和身份证号,给上游系统加一道数据保护屏障。

分享到:
上一篇
多GPU服务器部署vLLM集群,中转网关负载均衡调度
下一篇
LiteLLM失败重试策略,指数退避
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意