防范nginx钓鱼攻击的核心是阻断未经校验的跳转逻辑、严格控制重定向来源、防止伪造参数诱导访问恶意站点;需白名单校验redirect等参数、禁用动态拼接跳转、限制referer与token双因子验证,并关闭空host、目录列表及危险http方法。

防范 Nginx 环境下恶意请求重定向导致的钓鱼攻击,核心是**阻断未经校验的跳转逻辑、严格控制重定向来源、防止攻击者伪造跳转参数诱导用户访问恶意站点**。这类攻击常见于开放重定向(Open Redirect)漏洞,例如:/login?redirect=https://evil.com,若后端或 Nginx 未做白名单校验,就可能被用于钓鱼。
严格校验重定向参数值
避免在 Nginx 配置中直接拼接用户输入的 redirect、url、next 等参数进行跳转。即使业务需支持跳转,也必须限定为站内路径:
- 用正则精确匹配合法路径前缀,如只允许以
/dashboard、/profile、/help开头的相对路径 - 拒绝含协议(
http://、https://)、域名(//、@)、IP 或端口的绝对 URL - 示例配置(在 location 中拦截非法 redirect 参数):
if ($args ~* "(redirect|url|next)=([^&]*://|//|@|\d{1,3}\.\d{1,3}\.)") { return 400; }
禁用非预期的重定向响应
某些攻击会利用 Nginx 的 rewrite ... redirect 或 return 302 指令,配合恶意 Cookie 或 UA 绕过前端校验。应主动收紧控制:
- 删除所有动态拼接
$arg_*的 301/302 配置,除非经过严格白名单过滤 - 对登录、OAuth 回调等关键跳转路径,统一使用固定内部路径(如
return 302 /home;),而非读取参数 - 检查是否启用了
underscores_in_headers on;,防止攻击者用下划线传参绕过常规变量名校验
补充防御层:Referer + Cookie 双因子验证
对高风险跳转入口(如 /auth/callback、/sso/jump),可结合请求上下文增强可信度:
- 要求
Referer必须为本站主域名(可用valid_referers指令限制) - 搭配一次性 Token:跳转前由后端生成短时效 token 并写入 HttpOnly Cookie,Nginx 在重定向前用
$cookie_token校验有效性(配合 Lua 或 auth_request 模块) - 示例 Referer 限制:
valid_referers server_names *.example.com;
if ($invalid_referer) { return 403; }
关闭危险的默认行为
部分 Nginx 配置隐含重定向风险,需显式关闭:
- 禁用空 Host 头或非法 Host 的自动响应:
server { listen 80; server_name ""; return 444; } - 关闭目录列表(防路径泄露辅助钓鱼):
location / { autoindex off; } - 限制 HTTP 方法,禁止 TRACE/DEBUG 等可能被用于探测的请求:
limit_except GET HEAD POST { deny all; }











