Nginx várias condições na instrução if

1

Espero que seja fácil para vocês, gurus nginx por aí. Não consigo encontrar informações relevantes no google ou nos documentos, mas espero que isso seja possível.

Essencialmente, usando conselhos obtidos de outras pessoas, queremos impedir que o PHP seja executado em nossos diretórios de upload públicos. Estamos realizando isso assim:

if($uri !~ "^/vb_attach/") {
    fastcgi_pass 127.0.0.1:9005;
}

Mas neste site, temos vários diretórios de upload. Eu sei que o nginx não suporta & & ou || no condicional, então tentamos isso:

    if ($uri !~ "^/vb_attach/") {
            if($uri !~ "^/vb_album/") {
                    fastcgi_pass   127.0.0.1:9005;
            }
    }

mas foi dito que o segundo se não fosse permitido lá. Então, como podemos conseguir isso? Tudo o que queremos fazer é impedir que o PHP seja executado nesses diretórios de upload, apenas no caso de alguém conseguir ignorar as verificações nos scripts de upload.

    
por Kevin 02.03.2013 / 20:21

1 resposta

1

Um modo de prática recomendada para fazer isso é com location blocos que recusam pedidos de arquivos PHP.

Por exemplo:

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

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

  location ~ \.php {
    ...
  }
}

O wiki nginx tem várias alternativas para evitar esse problema de segurança específico que você pode achar útil em outras circunstâncias também.

    
por 03.03.2013 / 00:11

Tags