Nginx 配置:下面几行是什么意思

Nginx 配置:下面几行是什么意思

有人能解释一下在与 php-fpm 一起使用时在 Nginx 配置中添加以下几行的原因吗

    location ~ \..*/.*\.php$ {
            return 403;
    }

谢谢。

答案1

你最好读一下正则表达式为了理解这一点。上述配置意味着以点开头,后跟任意字符,然后是斜线,并以 something.php 结尾的请求将被禁止,例如:

http://domain.com/.abc/def.php

$ telnet localhost 81
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /.abc/def.php HTTP/1.0

HTTP/1.1 403 Forbidden
Server: nginx/1.0.5
Date: Wed, 19 Oct 2011 15:09:58 GMT
Content-Type: text/html
Content-Length: 168
Connection: close

答案2

在 nginx 论坛上有一些关于cgi.fix_pathinfo = 1它为什么是一个安全问题的长帖,简而言之,如果没有这条规则,在默认设置下,人们可以将非 php 文件(如.jpg)伪装成 php 文件,并诱骗服务器处理恶意文件中的代码。

Drupal、Wordpress、Squirrel 等通过 [或 user:login] 等查询将其参数传递给脚本 /index.php?q=user/login。它通常隐藏在 URL 中(清理/屏蔽),但这就是它的工作原理。

如果您使用 CGI 将请求传递到后端,则需要将其传递到名为 PATH_INFO 的参数中。php 开发人员已包含一项利用此功能的功能(默认情况下愚蠢地启用)。

这会导致最常见的 Nginx 设置出现安全问题。有人将恶意的 php 文件上传到您的服务器,例如带有 jpg 扩展名。然后他们转到http://server.com/sites/server.com/files/mybadfile.jpg/whatever.php

因为它以常见的 nginx 配置结尾,所以.php只需将其作为 传递给 php 后端即可SOMESCRIPT whatever.php。由于cgi.fix_pathinfo = 1,PHP 然后通过将其更改为 来“修复”请求 SOMESCRIPT mybadfile.jpg,并将其作为 php 脚本PATH_INFO /whatever.php执行。mybadfile.jpg

其余的你可以想象。

该正则表达式的意思是,如果文件以 .php 结尾,则禁止对任何子目录中任何文件的直接请求 [返回 403]

[.php$ 部分中的 $ 表示行尾,无论以什么结尾]

要理解这一点或一般的正则表达式,你应该搜索 nginx 文档或一般的正则表达式

答案3

看这里:http://forum.nginx.org/read.php?2,88845,88996

长话短说,在某些情况下,有人可以上传恶意文件(JPG,等等)并让 PHP 对其进行处理。

相关内容