Un clásico entre los clásicos, cómo proteger una carpeta (o una web completa) mediante usuario y contraseña, utilizando el archivo .htaccess y el Basic Authentication, lo que puede ser útil durante el desarrollo, o simplemente para restringir el acceso a determinadas zonas de la web a usuarios no autorizados.
Otro uso muy común es mantener alejados a los buscadores durante el desarrollo de una web, para que no indexen el contenido por defecto del sistema CMS utilizado o las pruebas de diseño o textos que utilicemos.
Se que es un tema muy trillado ya, y con cientos de ejemplos en otros tantos blogs o páginas de desarrollo, pero nunca tengo a mano un ejemplo y siempre me tropiezo con la misma piedra, así que haya va mi propio snippet.
Necesitamos incluir dos archivos en la carpeta que queremos proteger:
Un archivo llamado .haccess, con el siguiente contenido:
AuthUserFile /path/al/archivo/.htpasswd AuthName "Please Log In" AuthType Basic Require valid-user
Y un archivo .htpasswd con el siguiente contenido (para los más avispados, sí, el nombre de este archivo es indiferente, y se indica con el parámetro AuthUserFile del fichero anterior)
root:5PPzlS2f8RDBY
Donde, «root» es el nombre de usuario, y lo que viene detrás de los dos puntos el hash de la contraseña calculada mediante el algoritmo DES estándar (función crypt de PHP).
$hash = echo crypt('123456789','cualquiercadena');
La piedra con la que siempre tropiezo, la ruta al archivo de passwords debe indicarse como ruta absoluta, y no relativa, es decir no sirve simplemente lo siguiente, suponiendo que ambos archivos están en la misma carpeta.
AuthUserFile .htpasswd
Generador de ficheros .htaccess y .htpasswd
Para generar vuestros ficheros .htaccess y .htpasswd podéis utilizar el siguiente generador. Con el resultado obtenido sólo tendréis que modificar la ruta al fichero .htpasswd (primera línea del fichero .htaccess), según corresponda en vuestro servidor web.
[htaccess-generator]
Excluir ficheros del Basic Auth (Tarea Cron)
Normalmente utilizamos esta técnica para evitar que ‘curiosos’ o ‘despistados’ o los propios buscadores, entre en una tienda en Magento en desarrollo.
El problema es que a veces, esto es incompatible con algunas funciones de la tienda. Por ejemplo, en función del servidor que tengamos, podemos encontrarnos con la necesidad de ejecutar un determinado fichero cada cierto tiempo con una tarea cron.
Si para ejecutar la tarea cron, nuestro hosting nos proporciona por ejemplo curl, de forma que haremos:
curl http://www.<mi-tienda-online>.com/cron.php
Entonces la tarea cron será bloqueada por el usuario y contraseña, y nuestro Magento no funcionará correctamente en algunos aspectos.
Para evitar esta situación, podemos excluir el fichero cron.php de la validación de usuario, incluyendo en el fichero .htaccess el siguiente código:
<Files "cron.php"> Satisfy Any Allow from all </Files>
Hola, primero que todo gracias por la nota. Necesito que por favor me colabores diciéndome a qué se deberá que, habiendo ya cargado los dos archivos (a la misma carpeta), cuando intento acceder mediante el explorador de internet a la carpeta protegida, la primera vez se muestra la ventana emergente pidiendo el Nombre_de_Usuario y la Contraseña, pero una vez entro los datos se muestra el siguiente mensaje:
*************************
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, support@internetpeople.at and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
*************************
Y las siguientes veces que vuelvo a intentar, ya ni siquiera me pide el Nombre_de_Usuario y Contraseña, sino que de una vez se muestra el mismo mensaje de error anterior. ¿Qué podría estar haciendo mal en el procedimiento ? Gracias y ojalá me puedas ayudar.
———————–
EL contenido de mi archivo .htaccess es:
AuthUserFile /ruta/.htpasswd
AuthName «Por favor, introduzca usuario y contraseña»
AuthType Basic
Require valid-user
El contenido de mi archivo .htpasswd es:
uprueba:cumGzwtU82Vts
Inicialmente intenté la protección colocando el archivo .htpassswd en la raiz, y de acuerdo a esto colocando la primera linea de .htaccess así: «AuthUserFile /.htpasswd». EL inconveniente presentado era exactamente el mismo (la primera vez el sistema me pidió el Nombre_de_Usuario y Contraseña, y me luego me presentó el mensaje de error; las siguientes veces ni siquiera me pidió los datos de usuario y de una vez me presentó el error). Por eso opté por pasar el .htpasswd al mismo directorio protegido para detectar bien cuál era el error de mi parte.
He probado también dejando el archivo .htaccess completamente en blanco y, de esta forma no se me genera ningún mensaje de error, claro que obviamente no me pide datos para validar Nombre_de_Usuario.
Inicialmente lo intenté colocando la contraseña original para el usuario dentro del archivo .htpasswd, pero no pude lograr que la función crypt() de PHP la encriptara.