Nginx、PHP 和 fastcgi_split_path_info 上的安全问题

How*_*ard 5 security nginx

根据这篇文章,据说如果我使用 PHP/Nginx,为了更好的安全性,我应该要么

cgi.fix_pathinfo = 0
Run Code Online (Sandbox Code Playgroud)

或者

if ( $fastcgi_script_name ~ \..*\/.*php ) {
  return 403;
}
Run Code Online (Sandbox Code Playgroud)

其他教程中它推荐的风格

fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
Run Code Online (Sandbox Code Playgroud)

他们彼此矛盾吗?有什么安全建议吗?

谢谢。

Mic*_*ton 4

您指的是一个问题,攻击者可以将任意代码上传到 nginx Web 服务器,然后欺骗服务器将其作为 PHP 执行。(此问题不存在 CVE,因为它在技术上是错误配置而不是漏洞。)

您列出的任何方法都可以用来修复该问题

修复此问题的另一种更简单的方法是将以下内容添加到 PHP 中location

try_files $uri =404;
Run Code Online (Sandbox Code Playgroud)

尽管这仅在 nginx 和 PHP 在同一服务器上运行时才有效,这几乎总是正确的。

当然,建议您清楚地记录您正在做什么以及为什么这样做。