Tengo una aplicación web que es utilizada por muchos usuarios no técnicos. He descubierto que varios de estos usuarios están guardando la página de inicio de sesión de la aplicación en sus escritorios (que también guarda los archivos CSS y JS asociados). Luego, para comenzar a usar la aplicación, hacen doble clic en el icono del escritorio que muestra la copia local usando el protocolo file: //.¿Cómo evitar que los usuarios accedan a una aplicación web desde una página de inicio de sesión Html guardada localmente?
Esto puede causar problemas más adelante, p. si cambio el formulario de inicio de sesión, o la URL a la que publica, etc. También, ciertas utilidades de JavaScript, p. PIE.htc no funciona usando el protocolo file: //.
Obviamente, lo que deberían hacer es guardar un marcador/favorito del navegador, estoy buscando una forma de detectar y advertir a esos usuarios sin confundir el resto. He estado usando algunos javascript para advertir a estos usuarios:
if (top.location.protocol == 'file:') {
alert('This application is not designed to be accessed from a desktop copy...')
}
Pero esto sólo advertir a los usuarios que han salvado la copia de escritorio ya que he añadido este fragmento de código JavaScript.
¿Alguien más ha tenido este problema y ha encontrado soluciones inteligentes que les gustaría compartir?
Gracias
Actualización:
Al final he decidido hacer esto mediante el establecimiento de una cookie con un valor nonce a petición página de inicio de sesión, y almacenar el mismo valor que un campo oculto en la forma . Luego, en el controlador de envío de formularios, compruebe que los dos son iguales y muestre un mensaje de error si no es así. Uno podría almacenar el nonce en una sesión en lugar de una cookie, pero no quiero crear sesiones innecesarias.
Si el usuario ha guardado la página de inicio de sesión localmente, es probable que tenga diferentes valores nonce en el formulario guardado en comparación con la cookie (si tienen una cookie).
Normalmente, uno no agregaría la protección CSRF (que es una especie de esto) a un formulario de inicio de sesión, pero cumple mis requisitos. Leí sobre esta técnica en The Register, http://www.theregister.co.uk/2009/10/02/google_web_attack_protection/, Google implementó una protección similar para sus formularios de inicio de sesión, para proteger contra la falsificación de solicitudes de inicio de sesión, http://en.wikipedia.org/wiki/Cross-site_request_forgery#Forging_login_requests.
Es cierto que no habrá cookies en la copia guardada. Así que puedo configurar la cookie en el formulario de inicio de sesión y verificar su presencia después de iniciar sesión, en la página del menú, ¡lindo! –
¿Sugiere usar un token CSRF dependiente del tiempo enviado desde la página de inicio de sesión al controlador de inicio de sesión? Supongo que, al igual que con la protección CSRF, estoy intentando detectar solicitudes que no provienen de mi aplicación, por lo que probablemente esto también funcione. Probaré tus sugerencias e informaré. –