nginx解析漏洞、编码绕过漏洞,配置加固要点

Nginx解析漏洞和编码绕过漏洞是两类常见的 Web 服务器安全风险,可能导致恶意脚本执行或文件被错误解析。
本文先说明漏洞成因,再给出可直接执行的配置加固步骤,并附上验证方法,适合使用 Nginx 的站长和运维新手操作。

漏洞是怎么产生的

解析漏洞通常与 PHP 的 CGI 配置有关。
当 Nginx 通过 fastcgi_pass 将请求转发给 PHP-FPM 时,如果请求路径为 xxx.jpg/xxx.phpxxx.jpg%00.php,Nginx 可能因为路径解析的差异,把图片文件当作 PHP 脚本交给 FastCGI 处理。
攻击者只要在图片中嵌入 PHP 代码,就能让服务器执行恶意指令,从而实现入侵。

编码绕过漏洞则利用 Nginx 对 URL 编码的解析规则。
例如 %00(空字节)、%0a(换行)、%20(空格)等字符在某些场景下可以被用来绕过访问控制或匹配规则,导致敏感文件被读取或脚本被执行。

加固前先检查现状

在修改配置之前,先确认当前 Nginx 版本和已启用模块。
登录服务器,执行:

nginx -v
nginx -V 2>&1 | grep -E 'http|fastcgi'

查看站点配置中哪些 server 块包含 fastcgi_passproxy_pass,把这些位置记录下来,后续需要重点调整。

核心加固步骤

1. 隔离 PHP 解析位置

编辑 Nginx 配置文件(如 /etc/nginx/nginx.conf 或站点 conf 文件),确保只有明确的 .php 请求才会交给 PHP-FPM。
server 块中找到或添加如下配置:

location ~ \.php$ {
    root           /var/www/html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

同时给静态资源目录增加白名单约束,例如图片目录:

location ~* \.(jpg|jpeg|png|gif|bmp|swf)$ {
    expires 30d;
    access_log off;
    # 禁止图片文件被当作 PHP 解析
    try_files $uri =404;
}

这样即使攻击者构造 test.jpg/xxx.php,Nginx 也会因为 try_files 检查而返回 404,不会进入 PHP 处理逻辑。

2. 过滤非法编码字符

http 块或 server 块中加入 URL 过滤规则,拦截包含空字节、换行等危险编码的请求:

if ($request_uri ~* (\%00|\%0a|\%0d|\%20|\%2f|\%5c)) {
    return 403;
}

注意 %2f 是斜杠的编码,%5c 是反斜杠的编码,这些都可能被用来绕过路径匹配。
如果你的业务确实需要这类字符,请单独放行,不要直接删除该规则。

3. 禁止上传目录执行脚本

如果网站存在文件上传功能,必须给上传目录单独禁用 PHP 执行权限。
在站点配置中加入:

location /upload/ {
    location ~ \.php$ { return 403; }
    try_files $uri $uri/ =404;
}

这样即使上传了带 PHP 代码的图片,访问 upload/图片名.php 也会被拒绝。

避坑指南

不要直接删除 fastcgi_pass 配置,否则会导致整个站点的 PHP 无法运行。
改配置前先备份所有有改动的文件:

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

修改后一定要验证语法并重载服务:

nginx -t
systemctl reload nginx

有些安全组件或 CDN 会自动拦截 %00,但服务器本身的加固不能省。
另外 Nginx 的 if 指令只能在 locationserver 上下文使用,不要写在 http 块里,否则会报错。

效果验证

在网站根目录创建测试文件 test.jpg,内容写入 php phpinfo();?
>
,然后尝试访问下面的地址:

/test.jpg/.php
/test.jpg%00.php
/upload/test.jpg/xxx.php

如果返回 403 或 404,说明解析漏洞已经堵住。
如果返回 PHP 信息页面,说明配置仍有遗漏,请检查 location 匹配顺序和 try_files 是否生效。
最后再访问一个正常的 index.php 页面,确认 PHP 功能没有受影响。

完成以上步骤后,你的 Nginx 已经能有效抵御解析漏洞和常见的编码绕过攻击。
如果你正在处理 Nginx 解析漏洞、编码绕过漏洞的配置加固要点,建议先按本文步骤完整执行,再根据自己环境微调;
遇到异常时优先回看避坑说明。

分享到:
上一篇
代理转发真实IP处理错误,业务拿不到真实攻击IP无法封禁
下一篇
Cookie安全属性Secure、HttpOnly
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意