¿Cómo denegar la ejecución del shell en todos los subdirectorios?

1

Quiero que nginx niegue a los usuarios que tienen carpetas dentro de / webroot / uploads

por ejemplo

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

para ejecutar cualquier shell (php, pl, py, binary).

Los shells suelen estar ocultos en archivos jpg o gif. como badfile.php.jpg

También veo archivos binarios malintencionados que se cargan en la carpeta.

Aquí mis reglas preliminares:

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

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

Pero no estoy seguro de que sea lo suficientemente robusto. Así que aprecio tu ayuda.

    
pregunta hnn 21.01.2014 - 22:34
fuente

1 respuesta

1

Primero, asegúrate de que tienes los mime.types correctamente configurados en tu archivo de configuración ( enlace ), así que Un foo.php.jpg todavía se trata como una imagen.

También, use tilde-asterisk (~ *) en lugar de solo tilde (~), esto hará que su expresión regular sea insensible (y así evitará archivos como blah.pHP y evil.PHp, ...):

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

Un enfoque que podría adoptar es agregar a la lista blanca las extensiones permitidas y manejar otras. Dado que Nginx no tiene una sintaxis para no coincidir con una expresión, podría "no hacer nada" cuando se encuentra una coincidencia, y negar / redirigir el resto

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

# all other requests come here
location / {
  # redirect, deny, ...
}
    
respondido por el ndrix 20.02.2014 - 13:29
fuente

Lea otras preguntas en las etiquetas