Nginx: Negar que os scripts sejam executados em um diretório, bem como em todos os seus subdiretórios

3

Digamos que meu website permita que os usuários criem diretórios, bem como façam upload para um diretório chamado "/ uploads", assim:

/ uploads / user_created_folder_1

/ uploads / user_created_folder_2

/ uploads / user_created_folder_3

... e assim por diante

Como evito que um script potencialmente mal-intencionado seja executado em "/ uploads", bem como todos os seus subdiretórios ?

O código a seguir no bloco do servidor está correto?

location /uploads/.*.(php|pl|py|jsp|asp|sh|cgi)$ {
                return 403;
                error_page 403 403.html;
        }

Muito obrigado!

    
por Honey Badger 31.03.2014 / 07:29

1 resposta

7

Primeiro, o nginx não executa scripts. Sob algumas condições, poderia requisitar proxy para outro servidor que executasse o script. A condição mais comum é a extensão do arquivo na solicitação e o bloco típico de configuração do nginx se parece com isto:

location ~* \.php$ {
  fastcgi_pass backend;
  ...
}

Portanto, sua pergunta deve ser: como evitar solicitações de proxy para a pasta /uploads/ ? E com esta resposta típica de configuração é tão simples como:

location ^~ /uploads/ {
}

o que significa: se o pedido para uploads de pasta, apenas servi-los como arquivos estáticos, não tente procurar locais de regexp para eles (que exigem que você entenda diferentes tipos de nginx location s ).

Se a sua configuração é muito diferente da típica, precisamos vê-la para dar uma resposta adequada.

    
por 31.03.2014 / 08:39

Tags