如何通过配置 access_log 过滤掉请求 URL 中不慎暴露的明文密码与 Token

胖丽小哥_9888

胖丽小哥_9888

2026-06-21

910人浏览

原创

根本原则是不在url中传递敏感信息,应改用post请求体或authorization头传输;nginx原生不支持动态脱敏,可用map做有限替换或nginx-lua模块实现可靠实时清洗。

如何通过配置 access_log 过滤掉请求 url 中不慎暴露的明文密码与 token

直接在 Nginx 的 access_log 中过滤 URL 中的明文密码或 Token,不能靠正则替换或日志格式“隐藏”敏感参数——因为 Nginx 的 log_format 不支持运行时对变量值做条件脱敏(如匹配 pwd= 后截断),且 $request_uri 或 $args 是原始字符串,无法安全擦除特定键值。

根本原则:不在 URL 中传递敏感信息

这是最有效、最合规的做法。HTTP GET 请求的 URL 会完整记录在 access_log、代理层、浏览器历史、CDN 缓存、服务端错误堆栈中,极易泄露。

  • 将密码、Token、API key 等一律改用 POST 请求体(application/json 或 application/x-www-form-urlencoded)传输
  • 前端避免拼接 ?token=xxx&pwd=123 类 URL;后端拒绝处理含 pwd=、password=、auth_token=、api_key= 等参数的 GET 请求(可返回 400)
  • 使用标准鉴权方式:Bearer Token 放在 Authorization: Bearer xxx 请求头,而非 URL

若必须兼容旧链路:用 map + log_format 做有限脱敏

Nginx 本身不支持动态重写 $args,但可用 map 预定义规则,将含敏感参数的 URI 替换为脱敏版本(仅适用于固定参数名、且能接受部分误伤的场景):

Accessory Bundles
Accessory Bundles

为多SKU配件店铺(如全系列手机壳、表带)设计交叉销售和捆绑结构。当用户提及捆绑销售时使用。

下载
# 在 http 块中定义
map $request_uri $sanitized_uri {
    ~^(?<pre class="brush:php;toolbar:false;" fix>[^?]*\?)((?!(pwd|password|token|auth_token|api_key)=)[^&]*&)*((pwd|password|token|auth_token|api_key)=[^&]*&?)(?<suffix>.*)$  "${prefix}${suffix}";
    ~^(?<pre class="brush:php;toolbar:false;" fix>[^?]*\?)(?<suffix>.*)(pwd|password|token|auth_token|api_key)=[^&]*$  "${prefix}${suffix}";
    default $request_uri;
}
<p>log_format secure '$remote_addr - $remote_user [$time_local] '
'"$request_method $sanitized_uri $server_protocol" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
access_log /var/log/nginx/access.log secure;</p></suffix>

⚠️ 注意:
– 此方案依赖 PCRE 正则,性能略降,且无法覆盖嵌套编码(如 pwd%3D123)、大小写变体(PWD=)、或参数名被混淆的情况
– map 不支持嵌套逻辑,复杂清洗需 Lua(见下条)

高可靠性方案:用 nginx-lua 模块实时脱敏

启用 nginx-lua(OpenResty 或编译含 lua-nginx-module),在日志写入前清理参数:

log_by_lua_block {
    local uri = ngx.var.request_uri
    -- 移除常见敏感参数(支持 URL 编码)
    local sanitized = string.gsub(uri, "[?&](pwd|password|token|auth_token|api_key)=[^&]*", "")
    sanitized = string.gsub(sanitized, "[?&]$", "") -- 清理末尾残留 ? 或 &
    ngx.var.sanitized_uri = sanitized
}

再配合自定义 log_format:

log_format secure '... "$sanitized_uri" ...';
access_log /var/log/nginx/access.log secure;

✅ 优势:支持 decode + 多轮匹配、大小写不敏感、可扩展校验逻辑(如 token 长度特征)
❌ 要求部署 OpenResty 或自编译 Nginx,运维成本略高

配套加固建议

  • 开启 secure_link 或 JWT 验证,替代 URL 中传 token
  • 用 WAF(如 ModSecurity)在入口层拦截含敏感参数的请求,直接阻断而非仅脱敏
  • 定期扫描 access_log,用脚本 grep pwd=、token= 等关键词,发现未收敛的泄露点
  • 所有测试环境禁用 access_log,或单独隔离日志路径并限制读取权限

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

403

5

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3427

6

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

2023.08.04

6125

6

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

561

5

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.07.09

1476

5

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

2024.08.07

3958

3

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

122

12

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

477

23

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

2026.03.16

159

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 7.2万人学习