Nginx config: qual é o significado das seguintes linhas

1

Alguém pode explicar o motivo de adicionar as seguintes linhas, na configuração Nginx, quando usado com php-fpm

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

Obrigado.

    
por Howard 19.10.2011 / 16:51

3 respostas

3

É melhor você ler sobre a expressão regular para entender isso. A configuração acima significa que um pedido começa com um ponto, seguido por qualquer caractere, depois barra e termina com algo. O php será proibido, por exemplo:

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
    
por 19.10.2011 / 17:10
2

Existem alguns tópicos longos sobre cgi.fix_pathinfo = 1 e porque é um problema de segurança nas placas nginx, em poucas palavras, sem essa regra nas configurações padrão, pode-se mascarar um arquivo não php (como .jpg ) como um php um e enganar o servidor para processar o código no arquivo malicioso.

Drupal, Wordpress, Squirrel etc passam seus parâmetros para scripts através de consultas como /index.php?q=user/login [ou usuário: login]. Geralmente está escondido no URL (limpeza / mascaramento), mas é assim que funciona.

Se você estiver usando o CGI para passar o pedido para um backend, você precisa passá-lo em um parâmetro chamado PATH_INFO. Os desenvolvedores do php incluíram um recurso (estupidamente habilitado por padrão) que faz uso disso.

Isso leva a um problema de segurança com as configurações mais comuns do Nginx. Alguém carrega um arquivo php malicioso no seu servidor, digamos com uma extensão jpg. Então eles vão para http://server.com/sites/server.com/files/mybadfile.jpg/whatever.php

Como ele termina em .php configurações comuns do nginx, basta passá-lo ao backend do php como SOMESCRIPT whatever.php . Devido a cgi.fix_pathinfo = 1 , o PHP "corrige" o pedido alterando que seja SOMESCRIPT mybadfile.jpg e PATH_INFO /whatever.php e executa mybadfile.jpg como um script php.

Você pode imaginar o resto.

o que a expressão regular significa é que qualquer requisição direta a qualquer arquivo em qualquer subdiretório deve ser proibida [return 403] se o arquivo terminar com .php

[a parte .php $ com $ mostrando o final da linha, o que quer que termine com isso]

para entender isso ou expressões regulares em geral, você provavelmente deveria pesquisar a documentação do nginx ou expressões regulares em geral

    
por 19.10.2011 / 17:38
1

Veja aqui: link

Para encurtar a história, em algumas configurações, alguém poderia fazer o upload de um arquivo malicioso (JPG, qualquer que seja) e processá-lo pelo PHP.

    
por 19.10.2011 / 17:10