Cómo privatizar tu web con contraseña con el archivo .htaccess

En el momento en el que estoy escribiendo estas palabras, mi página web está protegida con contraseña en su totalidad excepto algunos enlaces. Esto lo he hecho así para poder trabajar en ella y aprender poco a poco haciendo pruebas, sin que nada sea público. La forma de hacerlo es muy sencilla, con un simple archivo que debes colocar en tu servidor web. Sin embargo, si estás utilizando wordpress u otro gestor de contenido probablemente haya mejor formas de hacerlo. También he de advertir que esto lo he probado con un servidor apache, desconozco si para otros será de la misma forma.

El archivo se llama .htaccess y según lo que quieras conseguir tendrás que configurarlo de formas distintas. Puedes requerir una contraseña a uno o varios usuarios que tu elijas para acceder a uno, varios o todos los recursos que alojes en tu web.

Si quieres proteger toda la web deberás crear (o modificar si ya lo tienes) el archivo .htaccess en el directorio principal, el cual en mi caso es parecido a este: “/kunden/homepages/39/d912951239/htdocs”. Si quieres que sea todo público excepto algunos enlaces, deberas crearlo en la carpeta donde quieras requerir la contraseña, por ejemplo: “/kunden/homepages/39/d912951239/htdocs/private”.

Dependiendo si quieres utilizar un solo usuario o varios deberás hacer una cosa u otra. Si sólo quieres utilizar un usuario, la mejor opción es utilizar el propio usuario que te da el hosting para acceder por sftp o ssh. Es la forma más segura ya que el archivo donde se aloja la contraseña encriptada de tu usuario (htpasswd) sólo tiene permiso de lectura para root. Sin embargo esto es así en la empresa donde yo alojo la web, pero desconozco si es así en todos sitios.

-r-------- 1 www-data ftpusers 118 jun 19 21:46 htpasswd

Usuario proporcionado por el hosting

Esta forma es la más sencilla, lo primero que debes hacer es localizar el archivo htpasswd o .htpasswd en el servidor. A continuación modifica el .htaccess y añade las siguientes lineas, reemplazando mi información (ruta al archivo y nombre de usuario) por la tuya:

1
2
3
4
5
AuthType Basic
AuthName "Dialog prompt"
AuthBasicProvider file
AuthUserFile "/kunden/homepages/39/d912951239/htpasswd"
Require user u102573847

Ya puedes subir el archivo y al recargar la página, debe aparecer una ventana en tu navegador solicitando el usuario y la contraseña. Hay que tener cuidado si los datos se envían por HTTP o HTTPS, ya que si es de la primera forma no se encriptará la contraseña. Para forzar la conexión HTTPS es recomendable usar HSTS, se puede hacer fácilmente añadiendo unas pocas lineas más al mismo archivo .htaccess que estamos modificando ahora mismo. Escribiré otro pequeño artículo hablando sobre esto.

Uno o más usuarios de libre elección

Si lo que quieres es utilizar nombres de usuario y contraseñas creadas por ti, tienes que crear tu propio archivo htpasswd de la siguiente forma:

  1. Conéctate por ssh al servidor
  2. Situate en el directorio que quieras proteger
  3. Usa la siguiente orden:

htpasswd -c <ruta>/.htpasswd <user>

Siendo “user” el nombre de usuario que desees, “ruta” la ruta al directorio y -c la opción para que se cree el nuevo archivo. Al presionar enter se pedirá la contraseña de el nuevo usuario. Para crear más usuarios quita la opcion -c. Ejemplo del comando:

htpasswd -c /kunden/homepages/39/d912951239/private/.htpasswd mynewuser

Si quisiera otro usuario:

htpasswd /kunden/homepages/39/d912951239/private/.htpasswd myseconduser

Ahora introduce en .htaccess las siguientes lineas, reemplazando mis datos por los tuyos:

1
2
3
4
5
AuthType Basic
AuthName "Dialog prompt"
AuthBasicProvider file
AuthUserFile /kunden/homepages/39/d912951239/htdocs/private/.htpasswd
Require valid-user

Si tienes más de un usuario, requerir un “valid-user” buscará en el nuevo archivo .htpasswd usuarios y contraseñas coindicentes.

Más información

Si no es exactamente esto lo que buscabas o estás teniendo problemas, todo esto está bien explicado en la documentación de apache.