Come negare l'esecuzione della shell in tutte le sottodirectory?

1

Voglio nginx per negare agli utenti che hanno cartelle all'interno / webroot / upload

per es.

/webroot/uploads/user1
/webroot/uploads/user2
/webroot/uploads/user999

per eseguire qualsiasi shell (php, pl, py, binary).

Le shell sono spesso nascoste nei file jpg o gif. come badfile.php.jpg

Vedo anche file maligni binari caricati nella cartella.

Ecco le mie regole preliminari:

location ~ /webroot/uploads/(.+)\.php$ {
 deny all;
}

location ~ /webroot/uploads/(.+)\.pl$ {
 deny all;
}

Ma non sono sicuro che sia abbastanza robusto. Quindi apprezzo il tuo aiuto.

    
posta hnn 21.01.2014 - 22:34
fonte

1 risposta

1

Prima di tutto, assicurati di aver installato correttamente il file mime.types nel tuo file di configurazione ( link ), quindi un foo.php.jpg è ancora trattato come un'immagine.

Inoltre, usa l'asterisco tilde (~ *) invece della sola tilde (~), questo renderà la tua espressione regolare senza distinzione tra maiuscole e minuscole (e quindi impedirà file come blah.pHP e evil.PHp, ...):

location ~* /webroot/uploads/(.+)\.php$ {
  deny all;
}

Un approccio che potresti adottare è inserire nella whitelist le estensioni consentite e gestirne altre. Dato che Nginx non ha una sintassi per non trovare corrispondenza con un'espressione, potresti "non fare nulla" quando viene trovata una corrispondenza, e nega / reindirizza il resto

location ~* /webroot/uploads/(.+)\.(jpg|gif|png|mp3)$ {
  # empty block
}

# all other requests come here
location / {
  # redirect, deny, ...
}
    
risposta data 20.02.2014 - 13:29
fonte

Leggi altre domande sui tag