Cómo proteger con contraseña un sitio web o una sola página
Cómo proteger un sitio web con contraseña
Cómo proteger con contraseña un sitio o página web (opciones reales) | We.Inc
Protege con contraseña una página o un sitio entero de la forma que realmente funciona: Basic auth en el servidor, la contraseña de página de tu hosting o creador, o cuentas de miembros, y por qué fallan las barreras hechas solo con scripts.
Una comprobación de contraseña real ocurre en el servidor antes de enviar la página. Usa el ajuste de contraseña de página de tu hosting o creador de sitios, la autenticación HTTP Basic en Apache o Nginx, o cuentas de miembros de verdad. Una casilla de contraseña escrita en JavaScript solo oculta la página en el navegador; el contenido llega igualmente y cualquiera puede leer el código fuente.
Formas de poner una contraseña a un sitio
Opción
¿Protege el contenido?
Ideal para
Contraseña de página del creador o CMS
Sí, la comprueba la plataforma
Una página privada para un cliente o un evento
Autenticación HTTP Basic (Apache, Nginx)
Sí, con HTTPS
Un sitio de pruebas o una carpeta entera
Cuentas de miembros
Sí, por persona
Zonas privadas de pago o de larga duración
Prompt de JavaScript o div oculto
No
Nada que importe
Escribe un nombre de usuario y una contraseña para ver la cabecera Authorization exacta que envía un navegador con la autenticación Basic, y lo fácil que es volver a convertirla en texto plano. Muestra por qué Basic auth solo debe usarse con HTTPS. La codificación se hace en tu dispositivo; no se envía nada.
Decide si basta con una contraseña compartida o si cada persona necesita su propio acceso.
En un creador de sitios o en WordPress, busca primero un ajuste de visibilidad o de contraseña de página.
En tu propio servidor, añade autenticación Basic a la carpeta o location, con el archivo de contraseñas fuera de la carpeta web pública.
Comprueba que el sitio fuerza HTTPS y luego pruébalo en una ventana privada del navegador.
Pon a Basic auth una contraseña larga que no uses en ningún otro sitio, y cámbiala cuando termine el proyecto o la vista previa.
En WordPress, los editores y administradores pueden ver las entradas protegidas con contraseña en la pantalla Editar sin la contraseña.
Una página protegida puede seguir mostrando su título. No pongas datos privados en el título de la página.
Pide también a los buscadores que no muestren una página privada con una etiqueta noindex, pero nunca confíes en eso como protección.
Preguntas frecuentes
¿Puedo proteger una página con contraseña solo con HTML?
No. HTML no tiene forma de comprobar una contraseña. Todo lo que pongas en el archivo lo descarga cada visitante, así que la comprobación tiene que hacerse en el servidor o en la plataforma.
¿Es segura la autenticación HTTP Basic?
Solo con HTTPS. El RFC 7617 señala que la contraseña viaja por la red en texto claro, porque Base64 es una codificación, no un cifrado, y dice que el esquema no debe proteger información sensible sin algo como HTTPS.
¿Cómo protejo una página con contraseña en WordPress?
Abre la página o la entrada, cambia Visibilidad a Protegida con contraseña, introduce una contraseña y actualiza. Los visitantes ven el título y una petición de contraseña en lugar del contenido.
¿Puedo proteger un sitio de WordPress entero?
La propia documentación de WordPress dice que ocultar el sitio completo no forma parte del núcleo, y remite a plugins o a reglas de servidor como .htaccess.
¿Qué muestra el navegador con Basic auth?
El servidor responde con 401 y una cabecera WWW-Authenticate. El navegador pide entonces un nombre de usuario y una contraseña y repite la petición con una cabecera Authorization.
Por qué fallan las barreras hechas solo con scripts
Un tutorial habitual añade un prompt() y compara la respuesta con una contraseña escrita en el mismo script. El navegador ya ha descargado la página completa, y la contraseña está en el código fuente para cualquiera que pulse ver código fuente. Desactivar JavaScript se salta la comprobación por completo.
Lo mismo vale para el contenido oculto con CSS. Si las palabras están en el HTML, son públicas.
Elegir entre las opciones reales
Para una página que compartes con un cliente, la contraseña de página de tu creador o CMS es la opción segura más rápida. Para una copia de pruebas de un sitio, Basic auth en el servidor mantiene todo privado, también frente a los rastreadores de los buscadores.
Cuando distintas personas necesitan accesos distintos, o tendrás que quitar el acceso a alguien más adelante, usa cuentas. Una única contraseña compartida no se le puede retirar a una persona sin cambiarla para todos.
Configuraciones de servidor que protegen de verdad una carpeta
Crea el archivo de contraseñas con la herramienta htpasswd que viene con Apache (por ejemplo htpasswd -c /etc/apache2/.htpasswd client) y guárdalo fuera de la carpeta web pública.
Apache: .htaccess en la carpeta que quieres proteger
Require valid-user deja pasar a cualquiera que figure en el archivo de contraseñas.
Nginx: proteger una location
Nginx lee el mismo formato de archivo htpasswd. Recarga Nginx después de editar.
Lo que no debes hacer: una barrera en JavaScript
Se muestra para que sepas reconocerla. La contraseña y el contenido están ambos en el archivo que descarga cada visitante.
Lo que envía Basic auth
Nombre de usuario
Contraseña
El nombre de usuario no puede contener dos puntos, porque los dos puntos lo separan de la contraseña.
Cabecera que el navegador envía con cada petición
Decodificada por cualquiera que vea la petición
Base64 no es cifrado. Sin HTTPS, esta cabecera delata la contraseña.