:::: MENU ::::

Proteger carpetas mediante Basic Auth y .htaccess

Proteger carpetas mediante Basic Auth y .htaccess
8 votos, 4.75 media (91% puntos)

Solicitud de authenticación básicaUn 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.

Generador de ficheros .htaccess y .htpasswd

Introduce los valores a continuación y pulsa el botón Generar

Ficheros .htaccess y .htpasswd resultado

Genera los ficheros y copia y pega su contenido en la carpeta que quieras proteger. Recuerda modificar la ruta en la primera línea del fichero .htaccess

Contenido del archivo .htaccess

Contenido todavía no generado

Contenido del archivo .htpasswd

Contenido todavía no generado

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> 



2 Comments

  • Responder Humberto |

    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

  • Responder Humberto |

    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.

Hey! Qué opinas sobre el artículo?