必须从Nginx服务器层、Yii应用框架层、PHP运行时环境三方面联动加固:禁用server_tokens和expose_php,拦截非法HTTP方法与危险URI编码,禁止访问vendor/config/runtime等敏感目录,限制仅web/下PHP可执行,并校验PATH_INFO路由白名单。

加固 Nginx 并协同修复 Yii 2.0.44 的安全风险,不能只靠单点修补,需从 Web 服务器层、应用框架层、运行时环境三方面联动。Yii 2.0.44 本身已修复 CVE-2020-15148(反序列化 RCE)等高危漏洞,但若部署不当或中间件配置松散,仍可能被绕过或放大风险。
关闭敏感响应头与版本暴露
Nginx 默认会返回 Server: nginx/x.x.x,攻击者可据此识别版本并匹配已知漏洞利用链。必须禁用:
- 在
nginx.conf的http块中添加:server_tokens off; - 同时检查是否启用了
X-Powered-By等 PHP 头:在php.ini中设expose_php = Off - 若使用 FastCGI,确保未在
fastcgi_params中透传SCRIPT_FILENAME等危险变量
限制请求行为,防御协议级绕过
Yii 应用若未做充分输入归一化,可能受 WAF 规则逃逸影响(如双重编码、畸形分块传输)。Nginx 可前置拦截异常流量:
- 拒绝非法 HTTP 方法:
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS|PATCH)$) { return 405; } - 限制 URL 编码深度,防止递归解码绕过:
merge_slashes off;+ 配合location块对%字符做正则拦截(如if ($request_uri ~ "%[0-9A-Fa-f]{2}") { return 400; },慎用,需测试兼容性) - 启用
underscores_in_headers on;防止攻击者利用下划线/短横混淆(如X-Origin-IpvsX-Origin_IP)
隔离 Yii 运行上下文,阻断未授权访问路径
Yii 2.0.44 的安全依赖于正确配置的入口和路由,Nginx 必须阻止直接访问敏感目录:
- 禁止访问
vendor/、config/、runtime/、migrations/等目录:location ~ ^/(vendor|config|runtime|migrations|tests|\.env|\.git) { deny all; } - 限制
web/目录为唯一公开入口,其他 PHP 文件一律拒之门外:location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 仅允许 web/ 下的 .php 执行,其余全部 403 } - 对
index.php后的路由参数做白名单校验(如 Yii 使用 PATH_INFO),避免任意文件读取或路径穿越
强化日志与实时响应能力
日志本身是纵深防御的关键一环,尤其在排查 Yii 未捕获的异常请求时:
- 记录完整原始请求体(谨慎开启,避免泄露敏感数据):
log_format main '... "$request_body"';(仅调试期启用) - 标记疑似攻击特征的请求(如含
phar://、ogg://、data://协议):if ($request_uri ~ "(phar|data|php://)") { return 403; } - 将 Nginx 错误日志级别调至
warn或error,配合 logrotate 每日切割并保留 90 天


















