| Inicio | Noticias | Comunicados | Mesa de ayuda | Mapa de sitio | RSS |
|
Proteger carpetas con .htaccess y .htpasswd
Aprende a proteger directorios de tu página web mediante archivos .htaccess de una forma sencilla. Algunos paneles de control tienen la opción integrada, pero nunca está de más saber hacerlo manualmente. Sobre todo porque así es más extendible. Requisitos:
.htaccess y .htpasswd Así se llaman los dos archivos más importantes para modificar cosas en nuestro servidor. No tienen ni extensión ni nombre, simplemente son así. Contienen texto plano, por lo que pueden ser editados con el Block de Notas, Notepad, Gedit, nano, wim, ... cualquier cosa que trabajo con texto plano (excepto MS Word que no genera archivos planos) El archivo .htaccess además de para proteger carpetas, sirve entre otras cosas para utilizarlo con el mod_rewrite de Apache y nos salgan URL's cortas. En esta ocasión, .htaccess establecerá el tipo de permiso necesario y qué usuarios pueden acceder a qué archivos, mientras que .htpasswd guardará el nombre de usuario y contraseña de cada uno de ellos. .htaccess
Este archivo lo colocaremos en la carpeta que queremos proteger. El archivo lleva un contenido similar a: AuthUserFile /ruta/absoluta/hacia/.htpasswd AuthName "Aqui puedes poner un comentario" AuthType Basic require valid-user Analizemos el contenido del archivo línea por línea. AuthUserFile /ruta/absoluta/hacia/.htpasswd Le tenemos que indicar la ruta absoluta (del servidor) hacia nuestro archivo .htpasswd, por norma general el archivo de contraseñas se pone fuera del alcance de la web, es decir, fuera de la carpeta public_html o similar, como por ejemplo "/home/usuario/.htaccess". En un servidor decente y con accesso por SSH o similares es muy fácil saber cual es la ruta absoluta hacia tu web, en caso contrario puedes utilizar este pequeño php para descubrirla : <?php die($_SERVER["DOCUMENT_ROOT"]); ?> Nota: Dejen siempre el archivo .htpasswd fuera del alcance público, en caso de que eso no sea posible, cambienle el nombre por algo del estilo .aSf5cHJ9D. No evitarás que puedan descubrir tus usuarios y contraseñas, pero le pones el camino bastante más dificil. AuthName "Para acceder a esta carpeta: Es necesario identificarse" Muestra el nombre del sitio, te aparecerá una ventanita preguntando el nombre de usuario y contraseña con un mensaje similar a "Para acceder a esta carpeta: Es necesario identificarse". Da exactamente igual lo que pongas, no tiene un efecto sobre el nombre real de la carpeta o archivos. AuthType Basic Indica que el tipo de autentificación es básico. require valid-user Donde podrán entrar todos los usuarios especificados en el archivo .htaccess (u otro nombre si así lo indicaste en la primera línea. require user test123 Indica que el único usuario que puede entrar es test123, cualquier otro -aunque la contraseña sea correcta- no será válido. Tenemos variaciones de esa línea como por ejemplo : require user test123 otrousuario unusuariomas Donde se pueden especificar 2, 3 o más usuarios. Podemos incluso proteger sólo algunos archivos de la manera: AuthUserFile /ruta/absoluta/hacia/.htpasswd AuthName "Para acceder a esta carpeta: Es necesario identificarse" AuthType Basic <Files "directorio.html"> Require valid-user </Files> <Files "correo.html"> Require user test123 </Files> .htpasswd
Me referiré a .htpasswd como el nombre del archivo, pero como ya dije anteriormente, si no lo pueden esconder de la vista pública, al menos cámbienle el nombre. Este archivo contiene una lista de nombres de usuario y contraseñas, en formato usuario:contraseña y cada pareja nombre-clave en una línea independiente, por ejemplo : test123:12JvVkeJRgm8A otrousuario:$1$UNHEaBiV$NzwYQ8NhjzIOUmFyfGyrO/ Como ven, la contraseña está encriptada, por lo general con una variación del algoritmo MD5 realizada por Apache. Pueden encontrar en Internet varios sitios en donde encriptar las contraseñas, por ejemplo el sitio Create a User Line for HTACCESS. Si disponemos de un servidor apache en local o acceso SSH a nuestro servidor web, podemos ejecutar el comando htpasswd para que nos cree el archivo, o nos devuelva la cadena en la misma consola; de hecho esta sería la forma más aconsejable de crear las contraseñas: htpasswd -nb usuario contrasenia Esta línea imprimirá en consola la cadena a agregar (manualmente) a nuestro archivo .htpasswd htpasswd -cb .htpasswd usuario contrasenia Esta otra escribirá en el .htpasswd la cadena corespondiente. La documentación del comando htpasswd es corta pero bastante interesante. En cualquiera de los casos, hasta el momento hemos de añadir manualmente las parejas usuario:contraseña a nuestro archivo .htpasswd, lo cual puede ser bastante engorroso, para ello podemos utilizar PHP para modificar el contenido de ese archivo, por ejemplo un script sencillo que se limita a añadir los nombres de usuario y contraseñas : <?php $archivo = $_SERVER["DOCUMENT_ROOT"].'/.xAF3fvV4'; $contenido = $username.":".crypt($password); if (is_writable($archivo)) { if (!$handle = fopen($archivo, 'a')) { echo "No se puede abrir el archivo ($archivo)"; exit; } if (fwrite($handle, $contenido) === FALSE) { echo "No se puede escribir en el archivo ($archivo)"; } fclose($handle); } else { echo "El archivo $archivo no se puede escribir"; } ?> Nos fijamos en dos cosas : Más información en:
Enlaces: |
| Última actualización el Martes, 27 de Julio de 2010 13:10 |