任何人都可以在使用php-fpm时解释在Nginxconfiguration中添加以下行的原因
location ~ \..*/.*\.php$ { return 403; }
谢谢。
为了理解这个,你最好阅读正则expression式 。 上面的configuration意味着一个请求以一个点开始,其后是任何字符,然后是斜杠,以some.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
有一些关于cgi.fix_pathinfo = 1长篇cgi.fix_pathinfo = 1 ,为什么它是nginx主板上的一个安全问题,有几句话没有默认设置的规则,可以伪装成一个非php文件(如.jpg )并诱骗服务器处理恶意文件中的代码。
Drupal,Wordpress,Squirrel等将参数通过/index.php?q=user/login [或user:login]等查询传递给脚本。 它通常隐藏在url(清洁/屏蔽),但它是如何工作的。
如果您使用CGI将请求传递到后端,则需要将其传递到名为PATH_INFO的参数中。 PHP开发人员已经包含了一个function(愚蠢地启用默认情况下),利用这一点。
这导致了最常见的Nginx设置的安全问题。 有人上传一个恶意的PHP文件到你的服务器,说一个JPG扩展名。 然后他们去http://server.com/sites/server.com/files/mybadfile.jpg/whatever.php
因为它以.php结尾,所以常见的nginxconfiguration只是把它作为SOMESCRIPT whatever.php传递给php的后端。 由于cgi.fix_pathinfo = 1 ,PHP通过将请求修改为SOMESCRIPT mybadfile.jpg和PATH_INFO /whatever.php并执行mybadfile.jpg作为php脚本来“修复”请求。
你可以想像其余的。
正则expression式意味着任何对任何子目录中任何文件的直接请求都将被禁止[返回403],如果文件以.php结尾
[带。$的.php $部分显示行的结尾,不pipe以什么结尾]
要理解这个或者一般的正则expression式,你应该一般的searchnginx文档或正则expression式
看到这里: http : //forum.nginx.org/read.php?2,88845,88996
长话短说,在某些设置中,有人可能上传恶意文件(JPG,不pipe),并由PHP处理。