Negar a execução de scripts no nginx para um URL específico

1

Eu tenho uma pasta de mídia na URL example.com/media/ e quero negar a usuários que executam scripts no meu servidor. Meu aplicativo de servidor é nginx e em Como negar a execução de scripts dentro de diretórios graváveis Não consegui encontrar nada de especial sobre um URL específico. Esta é a minha configuração do servidor nginx:

# sites-avalaible/default
server {
        listen  80;
        listen  443 ssl;
        server_name     www.example.com example.com;
        ssl_certificate /var/www/example/ssl/ssl.crt;
        ssl_certificate_key     /var/www/example/ssl/ssl.key;
        location /static  {
                alias   /var/www/example/static;
                expires 7d;
                add_header Pragma public;
                add_header Cache-Control "public, must-revalidate, proxy-revalidate";

        }
        location /media  {
                alias  /var/www/example/media;
                # limit download speed after 5mb download
                limit_rate_after 5m;
                limit_rate 120k;
                limit_req zone=lh burst=5 nodelay;
        }
        location / {
                proxy_pass      http://127.0.0.1:8000;
        }
}

Eu quero negar a execução de qualquer material executável na minha URL de mídia em que os usuários podem fazer upload de seus arquivos para o servidor. Como eu posso fazer isso? Por exemplo, quando o usuário navega para a página de erro example.com/media/bomb.py nginx return 404. Também alterei as permissões de execução da pasta de mídia, mas preciso fazer isso para o nginx para deixar de visualizar os arquivos de script.

    
por Hamid FzM 09.03.2014 / 12:14

1 resposta

1

Primeiro, quando não há outra configuração no nginx, ele simplesmente lê o arquivo do sistema de arquivos e o envia para o cliente via conexão TCP.

Então, no seu caso, se você tivesse um bomb.py no seu diretório de mídia, seus usuários simplesmente receberiam o arquivo, ele não seria executado.

Em segundo lugar, seu script de upload deve verificar os tipos de arquivo de upload permitidos, para que nenhum desses arquivos possa ser carregado.

Finalmente, uma resposta para sua pergunta real. Você pode fornecer uma diretiva location mais específica para o diretório de mídia, que permite que apenas algumas extensões sejam processadas com isso. Outras solicitações passam pela diretiva location / .

location ~* /media/[^\.]+\.(gif|jpg|png)$ {
    ....
}

Esta diretiva de localização servirá arquivos através do bloco somente se o nome do arquivo estiver no diretório /media/ , tiver pelo menos um caractere que não seja . e tenha uma extensão de gif / jpg / png.

    
por 09.03.2014 / 13:32