Nginx伪装攻击本质是绕过文件类型校验,将.php等可执行脚本改名成.jpg等静态后缀上传或请求,利用location匹配逻辑缺陷和不当fastcgi_pass配置,诱使Nginx错误交由PHP解析器执行,导致代码泄露或远程执行。

这类“伪装攻击”本质是绕过文件类型校验,把可执行脚本(如 .php)强行改名成静态资源后缀(如 .jpg),再上传或请求,试图诱使 Nginx 或后端解析执行。Nginx 本身不解析 PHP,但若配置不当,可能将该文件当作静态资源直接返回源码,或错误地交由 FastCGI 处理,造成代码泄露甚至远程执行。
为什么 .php 改成 .jpg 就可能“骗过”Nginx?
关键在 location 匹配逻辑和处理链路是否严格分离:
- Nginx 默认按 文件扩展名 或 正则匹配 决定用哪个 location 处理请求,而不是真实文件类型
- 如果存在类似
location ~ \.php$的规则,它只匹配结尾为.php的 URI;而/upload/test.jpg即便实际内容是 PHP 代码,也会落入location ~* \.(jpg|png|gif)$这类静态规则中 - 但若配置了宽松的
fastcgi_pass指向,或用了try_files $uri @php+location @php { fastcgi_pass ... },且未校验文件后缀,就可能把/test.jpg也送进 PHP 解释器 - 更危险的是:某些旧版或自定义模块(如未限制 MIME 类型的 upload 模块)允许上传任意后缀文件,并存放在 web 可访问路径下
如何识别并阻断这类伪装请求?
不能只靠后缀黑名单,要从请求路径、文件存在性、MIME 类型、甚至内容特征多层拦截:
-
禁止在静态目录中执行脚本:对
/upload/、/static/等用户可写目录,显式拒绝所有脚本后缀请求location ~ ^/(upload|static)/.*\.(php|phtml|php3|php4|php5|pl|py|jsp|asp|sh|cgi)$ { return 403; } -
剥离后缀再验证文件真实性:用
map指令提取扩展名,结合if判断是否属于允许的静态类型map $request_filename $allowed_ext { default 0; "~\.(jpg|jpeg|png|gif|webp|ico|css|js|woff2?)$" 1; }if ($allowed_ext = 0) { return 403; } -
强制静态资源走纯文件服务,禁用动态处理回退:在静态资源 location 中避免使用
try_files $uri @fallback,尤其不要 fallback 到 PHP 处理块;应直接root+expires+add_header Content-Type -
启用 MIME 类型严格校验(需 ngx_http_headers_module):对图片目录,可添加
location ~* ^/images/ { add_header Content-Type image/jpeg; types { } default_type image/jpeg; }
配合types_hash_max_size 2048;和精简的types块,防止伪造 Content-Type 绕过
上线前必须检查的三个配置风险点
很多伪装攻击得手,不是因为没方案,而是这些基础项被忽略:
-
root 与 alias 混用导致路径穿越:例如
alias /var/www/uploads/;配合rewrite ^/files/(.*)$ /$1 break;,可能让/files/../etc/passwd被解析为真实路径 - 未关闭 server_tokens 且暴露版本号:攻击者可精准匹配已知 Nginx + PHP 组合漏洞(如 1.14.0 + php-fpm 配置缺陷),提高伪装成功率
-
错误地开启 autoindex 或列出目录:暴露上传路径结构,帮助攻击者批量探测伪装文件,如扫描
/upload/*.jpg并逐个尝试执行
补充建议:用日志快速发现伪装行为
在 access_log 中加入 $sent_http_content_type 和 $request_filename,然后用脚本筛查异常组合:
- 请求 URI 含
.jpg但响应头Content-Type: text/html或application/x-httpd-php - 请求路径含
/upload/且状态码为 200,但响应体长度 - 同一 IP 在 1 分钟内请求 >50 个不同
.jpg路径,且无 referer 或 user-agent 异常
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











