Protegiendo tu sitio con contraseña con un archivo .htaccess

Generalidades

Este artículo explica cómo proteger con contraseña tu directorio a través de SSH creando un archivo .htaccess y .htpasswd. Los siguientes pasos están cubiertos en este artículo.

Usar el panel para proteger con contraseña tu sitio

La forma más fácil de proteger tu sitio con contraseña es usar la herramienta en el panel DreamHost. Navega a la página Htaccess/WebDAV. Luego puedes configurar la protección con contraseña allí.

Crear el archivo .htpasswd

Puedes usar un archivo .htaccess para proteger con una contraseña un archivo o carpeta mediante la autenticación básica.

  1. Crea un archivo .htpasswd en el directorio que deseas proteger con una contraseña, utilizando la utilidad htpasswd. Para el primer usuario, digamosle user1, ejecuta el siguiente comando:
    [server]$ htpasswd -c /home/username/example.com/.htpasswd user1
  2. Ingresa la contraseña para el usuario. Esto crea una contraseña para un usuario llamado 'user1'. El código en su archivo .htpasswd mostrará la contraseña cifrada de esta manera:
    user1:$apr1$bkS4zPQl$SyGLA9oP75L5uM5GHpe9A2
  3. Ejecútalo nuevamente (sin la opción -c) para cualquier otro usuario al que desees permitir el acceso a tu directorio.
  4. Configura los permisos en este archivo en 644.
    [server]$ chmod 644 .htpasswd

Revisa la siguiente página para más información:

Crear el archivo .htaccess

A continuación,  crea un archivo .htaccess usando el comando nano:

Asegúrate de agregar este archivo .htaccess en el directorio que deseas proteger con contraseña. Por ejemplo, si estás protegiendo con contraseña todo tu sitio, iría al directorio principal de tu sitio:

  • example.com

Si estás protegiendo con contraseña un subdirectorio, entraría en ese subdirectorio.

  • example.com/members
[server]$ nano .htaccess

Ejemplos de código para agregar al archivo .htaccess

Protege un directorio completo

Esta ejemplo de contraseña protege un directorio completo del sitio web. Asegúrate de cambiar las líneas en negrita a la ruta real de tu archivo cuando lo reemplaces por el nombre de tu usuario y nombre de tu dominio.

#Protect Directory
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/.htpasswd
Require valid-user

Protege un solo archivo

Este ejemplo de contraseña protege un solo archivo:

#Protect single file
<Files admin.php>
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/.htpasswd
Require valid-user
</Files>

Protege múltiples archivos

Este ejemplo protege varios archivos:

#Protect multiple files
<FilesMatch "^(admin|staff).php$">
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/.htpasswd
Require valid-user
</FilesMatch>

Código para proteger un subdirectorio de WordPress

Debido a cómo WordPress enruta todas las solicitudes de página, intentar acceder a un subdirectorio protegido por contraseña arrojará un error 404 No encontrado. Para resolver esto, debes añadir una línea adicional al archivo .htaccess para hacer referencia a ErrorDocument.

Este ejemplo protege un subdirectorio llamado 'members'.

ErrorDocument 401 default
    
#Protect Directory
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/members/.htpasswd
Require valid-user

Forzar SSL (HTTPS) en la solicitud de inicio de sesión

De manera predeterminada, la solicitud de inicio de sesión que ves no está encriptada. Esto significa que tu contraseña se enviará como texto sin formato a través de http. Para cifrar este inicio de sesión, debes agregar un certificado SSL a tu dominio. Una vez agregues el certificado SSL, agrega el código a continuación para forzar SSL al iniciar sesión.

Este método evita el envío de una solicitud de contraseña .htaccess en una conexión no cifrada. Si deseas asegurarte de que tu servidor sólo sirve documentos a través de un canal SSL encriptado, entonces debes usar la directiva SSLRequireSSL con la opción + StrictRequire habilitada:

Paso 1 — Agregar código a tu archivo .htaccess

Asegúrate de que la URL que ingreses junto a SSLRequire sea la URL base de tu sitio. No incluyas 'www' delante de la URL si estás forzando a eliminar 'www' en tu panel.

Si está asegurando un subdirectorio como 'example.com/blog', esta URL seguirá siendo 'example.com'.

Además, puedes usar cualquier archivo que desees para el documento 403. A continuación se muestra como 'error_redirect.php'. Cambia esto a tu archivo elegido.

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "example.com"
ErrorDocument 403 /error_redirect.php <Files /error_redirect.php> AuthType none </Files>

Si solo estás protegiendo un subdirectorio

Si solo deseas proteger un solo subdirectorio y no todo el sitio, especifica el subdirectorio en tu archivo .htaccess como se muestra en el siguiente código:

#Protect Directory
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/example_username/example.com/blog/.htpasswd
Require valid-user

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.example.com"

ErrorDocument 403 /blog/error_redirect.php

<Files /error_redirect.php>
  AuthType none
</Files>

Si tu sitio está en un servidor que ejecuta Ubuntu 14 (Trusty), asegúrate de cambiar la línea ErrorDocument a la ruta URL completa. Por ejemplo:

ErrorDocument 403 https://example.com/blog/error_redirect.php

Paso 2 — Agrega código a tu archivo error_redirect.php

Ahora que tu .htaccess redirigirá a la página de error, debes colocar algún código en esta página de error para redirigir correctamente a al inicio de sesión seguro. Agrega el siguiente código PHP.

<?php
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
?>

Si ahora intentas iniciar sesión, verás que tanto la URL como la solicitud de inicio de sesión cambian a https://example.com.

Problema con la renovación de un certificado 'Let's Encrypt'

El código puede hacer que un certificado 'Let's Encrypt' no se renueve correctamente. Si has agregado un certificado 'Let's Encrypt' a tu dominio, asegúrate de deshabilitar el siguiente código en tu archivo .htaccess cuando tu certificado esté a punto de renovarse. Una vez renovado, puedes volver a habilitar el siguiente código.

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.