entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Como evitar que naveguen por los directorios en PHP

Hola que tal a todos,

Esta vez quería preguntaros como podría evitar que un usuario que visite mi sitio web pudiera navegar por los directorios de esta desde la URL? es decir haciendo uso de la notación ../ o ..\

ejemplo --> www.misitioweb.com/index.php/../../

De esta manera podría visualizar toda la lista de ficheros que tengo(incluso los que no quiero que bajo ninguna circunstancia los vea y mucho menos los descargue por ejemplo haciendo uso de filter) ejemplo:

php://filter/convert.base64-encode/resource=

Un saludo!

0voto

carlossevi comentado

Hola pabeni, esto no es algo relativo a PHP sino al servidor web utilizado. ¿Utilizas Apache?

0voto

pabeni comentado

Si que hago uso de apache, lo estoy haciendo en un entorno local XAMP. Pero me gustaría que dentro de un tiempo cuando lo suba a un hosting no tenga esta vulnerabilidad etc...

1 Respuesta

5votos

carlossevi Puntos63540

La lista de archivos y directorios que Apache ofrece como respuesta ante una petición que tiene como ruta un directorio tiene como nombre DirectoryListing. En principio es una característica, pero es cierto que a muchos nos interesa deshabilitarla por motivos de seguridad.

Apache en primer lugar busca un archivo index dentro de la ruta solicitada. La configuración por defecto es:

DirectoryIndex index.html index.htm index.php welcome.html

Es decir, busca dentro de la ruta cualquiera de los archivos de la lista. En el caso de no encontrar ningún nombre de archivo que coincida con la lista de la configuración, genera su propia lista.

En primer lugar tienes que deshabilitar la generación de esas "listas", y se hace con la directiva Options de la configuración, en concreto con el valor Options -Indexes.

<Directory /home/httpd/turuta>
    Options -Indexes
    AllowOverride all
    Order allow,deny
    allow from all
</Directory>

Ese código puede ir tanto en el fichero de configuración general (httpd.conf) como en el de cada carpeta (.htaccess).


Extra: Aunque con esa configuración tiene que sobrar, en ocsasiones encontraras que se crean archivos index.html vacíos (o que muestren un texto de error) en las carpetas que no quieren que puedan listarse. Recordemos que Apache ejecuta 2 pasos:

  1. Busca archivos index, si lo encuentra termina
  2. Si no encuentra index, genera el suyo propio

Mediante la configuración anterior le dices que no ejecute el punto 2. Si al directorio le pones un index.html manualmente, Apache nunca pasará del punto 1. Es una solución menos segura pero efectiva si se cumple a rajatabla.


Fuente: http://wiki.apache.org/httpd/DirectoryListings

0voto

Leonardo-Tadei comentado

+1 Esto se limita desde la configuración del servidor web, ya que es quien responde a las peticiones: lo que no pasa por PHP no puede ser limitado desde PHP.

Adicionalmente, mucho software popular agregan un archivo index.html en blanco en cada directorio, de forma tal que si alguien apunta al directorio directamenet, aparecerá esa página en blanco y no la lista de archivos.

0voto

pabeni comentado

Muchísimas gracias, ya estaba pensando en crear algo... ya que desde XAMP(en localhost) si que podía navegar por los directorios hasta llegar al index of(y desde hay ver toda la jerarquía) cosa que me preocupaba.

Pero si me dices que desde el hosting que lo aloje ya lo ara por mi tengo que decirte que me alegra mucho saberlo ;)

Saludos!

0voto

Leonardo-Tadei comentado

... y en el caso de qu eel hosting no lo haga, la solución es el htaccess que te sugiere @carlossevi y/o el poner un index.html en blanco en cada directorio.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta