Nginx位置“〜\ .. * /。* \。php $”是做什么用的?

这个问题涉及到Drupal&nginx:一个健全的“通用”configuration?

我已经基于我发现的一些例子成功configuration了Nginx。 事情工作正常,但我无法弄清楚下面的位置指令正在做什么:

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

我认为它是防止.php文件被访问,但在哪些情况下,我不明白?

如果有人请求以.anything / anything.php这样的模式结尾的URL,那么Nginx会返回一个403.为了说明起见,正则expression式只定义了url的结尾,在这种情况下,模式前面没有物。

为什么? 不知道。 也许在你使用的应用程序中,这些URL有一些风险。

这不像描述的那么简单。 从nginx陷阱部分:

在这里,每个以.php结尾的请求将被传递给FastCGI后端。 与此相关的问题是,如果完整path不会导致文件系统上的实际文件,则默认的PHPconfiguration会尝试猜测要执行的文件。

例如,如果请求/forum/avatar/1232.jpg/file.php不存在,但如果/forum/avatar/1232.jpg,PHP解释器将处理/forum/avatar/1232.jpg代替。 如果这包含embedded的PHP代码,这个代码将被相应地执行。

所以,这一点的代码:

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

将捕获这个,如果尝试返回一个未find的响应。

它看起来像是一个天真的尝试,阻止访问攻击者可能已经放置在一个隐藏的目录(即一个点开始)的PHP文件的访问。

它阻止更多的( 包含一个点的任何目录),并不阻止攻击者访问隐藏的PHP文件。

如果您确定这不符合任何合法的URI,那么将其留在那里并没有什么坏处。 另一方面,任何可以将PHP文件放在隐藏目录中的攻击者都可以将PHP文件放置在任何其他目录中,因此没有任何好处。

更好的安全方法是防止攻击者上传PHP文件,并使用文件完整性系统,如AIDE或OSSEC。

我可能是错误的location的目的,但原来的作者没有描述规则的评论,所以很难确定。