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