Blog de Gonzalo

EVITAR ACCESO A FICHEROS O DIRECTORIOS

Con apache y .htaccess, a nivel de directorio, se puede evitar el acceso a ciertos ficheros o directorios, como pueden ser los archivos de configuración del sitio o el fichero .htaccess.
La manera de hacerlo es:


<Files fichero_configuracion.php>
order allow,deny
deny from all
</Files>

Para proteger el fichero .htaccess sería:

<files .htaccess>
order allow,deny
deny from all
</files>

También se puede proteger un directorio con contraseña, en el ejemplo se va a proteger el directorio "admin", sería:
Primero hay que crear el fichero de contraseñas (.passwd) en una ruta fuera de la parte pública del proyecto. En el ejemplo el fichero está en "/home/usuarios/.passwd". Dentro de ese fichero se irán añadiendo los usarios (uno por línea) de la siguiente forma: usuario1: password_usuario1. El password tiene que estar en MD5. Luego hay que configurar el fichero apache del sitio.

<directory "/var/www/html/proyecto/admin">
                AuthName "Usuario"
                AuthType Basic
                AuthUserFile /home/usuarios/.passwd
                Require valid-user
</directory>

Para hacerlo con el fichero .htaccess dentro del directorio que se quiere proteger sería casi igual:

AuthName "Usuario"
AuthType Basic
AuthUserFile /home/usuarios/.passwd
Require valid-user

Con esta configuracíon la carpeta admin estará protegida y solo podrán acceder los usuarios añadidos en el fichero "/home/usuarios/.passwd". Para generar este fichero de contraseñas se puede usar la aplicación de apache htpasswd de la siguiente manera: htpasswd -c /ruta/nombre-fichero nombre-usuario y te pedirá dos veces la clave. Si se quiere introducir más usuarios con esta herramnienta habrá que lanmzar el comando de la siguiente manera htpasswd /ruta/nombre-fichero nombre-usuario.
La ruta y el nombre del fichero habrá que ponerlo en la sección "AuthUserFile".
Para recoger el usuario y el password introducidos en php hay que usar el array server:
  • $_SERVER['PHP_AUTH_USER'] para el usuario
  • $_SERVER['PHP_AUTH_PW'] para la contraseña

Si quiero proteger un fichero dentro de un directorio, con usuario contraseña el procedimiento es similar al explicado con los directorios:

AuthName "Usuario"
AuthType Basic
AuthUserFile /home/usuarios/.passwd
<Files "nombredelarchivo.txt">
Require valid-user
</Files>

Ahora bien ¿y si tengo una carpeta protegida con usuario y contraseña, a la que pueden acceder varios usuarios, y quiero proteger varios archivos y decidir que usuarios pueden acceder a determinados ficheros?

AuthName "Usuario"
AuthType Basic
AuthUserFile /home/usuarios/.passwd
Require valid-user
<Files "nombredelarchivo1.txt">
Require user usuario1 usuario2>
</Files>
<Files "nombredelarchivo2.txt">
Require user usuario3
</Files>

En el ejemplo anterior la el directorio donde se encuentra este .htaccess está protegido por contraseña donde podrán acceder los usuarios usuario1, usuario2 y usuario3. En este directorio hay dos ficheros en concreto:
  • nombredelarchivo1.txt: Solo pueden acceder los usuarios usuario1 y usuario2
  • nombredelarchivo2.txt: Solo pueden acceder el usuarios usuario3

La verdad es que es bastante interesante.

Compartir en twitter