O que a localização do Nginx “~ \ .. * /. * \. php $” do?

1

Esta questão está relacionada com Drupal & nginx: uma configuração sonora de “propósito geral”?

Configurei o Nginx com sucesso com base em vários exemplos que encontrei. As coisas estão funcionando bem, mas não consigo descobrir o que a seguinte diretiva de localização está fazendo:

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

O que eu acho que faz é impedir que arquivos .php sejam acessados, mas em quais casos eu não consigo descobrir?

    
por sbrattla 22.02.2013 / 07:16

3 respostas

2

Se alguém solicitar um URL que termine com um padrão como .anything / anything.php, o Nginx retorna um 403. Apenas para esclarecimento, o regex define apenas o final do URL, neste caso, o que está na frente do padrão não importa.

Por quê? Nenhuma idéia. Talvez no aplicativo que você está usando haja algum tipo de risco dessas URLs.

    
por 22.02.2013 / 07:28
3

Não é tão simples quanto descrito. Da seção de armadilhas do nginx:

Here, every request ending in .php will be passed to the FastCGI backend. The issue with this is that the default PHP configuration tries to guess which file you want to execute if the full path does not lead to an actual file on the filesystem.

For instance, if a request is made for /forum/avatar/1232.jpg/file.php which does not exist but if /forum/avatar/1232.jpg does, the PHP interpreter will process /forum/avatar/1232.jpg instead. If this contains embedded PHP code, this code will be executed accordingly.

Então, esse código:

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

capturará isso e retornará uma resposta Not Found, se tentada.

    
por 09.02.2014 / 11:21
1

Parece uma tentativa ingênua de bloquear o acesso a um arquivo PHP que um invasor possa ter colocado em um diretório oculto (por exemplo, um que comece com um ponto).

Bloqueia mais que isso (qualquer diretório que contenha um ponto) e não impede que o invasor acesse arquivos PHP ocultos.

Se tiver certeza de que isso não corresponderá a nenhum URI legítimo, não haverá problema em deixá-lo lá. Por outro lado, não há nenhum benefício, pois qualquer invasor que possa colocar um arquivo PHP em um diretório oculto pode colocar um arquivo PHP em qualquer outro diretório.

Uma abordagem melhor para a segurança seria impedir que atacantes façam upload de arquivos PHP e usar um sistema de integridade de arquivos como o AIDE ou o OSSEC.

Eu posso estar errado sobre o propósito do location , mas o autor original não descreveu a regra com um comentário, por isso é difícil ter certeza.

    
por 22.02.2013 / 07:58

Tags