Se busca: estrategia segura de inicio de sesión / autenticación para el sitio web con AND sin JavaScript en 2018

2

Estoy tratando de descubrir una estrategia para la autenticación segura, sin reinventar la rueda, pero también teniendo en cuenta las limitaciones específicas de mi situación. La estrategia no debe estar vinculada a un marco particular, aunque estoy mirando un servidor node.js con una API REST, estoy sirviendo una aplicación web angular y también soy compatible con la representación del lado del servidor / Angular Universal, si eso importa.

Lo que puede ser específico acerca de mi situación es que me gustaría ayudar a los usuarios a permitir todas las funciones, así como a los usuarios con un navegador muy restringido, posiblemente JavaScript y cookies deshabilitadas. Tengo muy poco control sobre eso. (Lo sé, podríamos comenzar a discutir sobre esto; es 2018 y JavaScript no es tan malo, pero no tengo control sobre los usuarios, o ellos ni siquiera lo controlan ellos mismos, pero es su departamento de TI, ... ). Esto parece hacer las cosas bastante complicadas. Imagina los siguientes escenarios: Un usuario accede al sitio web y primero obtiene un HTML representado en el servidor. Entonces, ya sea

  1. en un segundo paso, la aplicación web completa (por ejemplo, Angular) se descarga y reemplaza la página pre-renderizada con la aplicación. De ahora en adelante, estamos ejecutando una aplicación web
  2. el usuario ha deshabilitado JavaScript o el navegador es demasiado antiguo, etc., por lo que el HTML permanece. El usuario usaría el sitio web utilizando HTML renderizado por el servidor

También podemos asumir que el servidor utiliza https / ssl. Al menos aquí, tengo el control total. Actualmente no necesito soporte para la autenticación externa / de terceros o un servidor de autenticación separado.

En general, me encontré con las siguientes estrategias:

  • Autenticación básica sobre https.
    • Pro: no requiere nada en el lado del cliente
    • Con: puede no ser completamente seguro
  • Tras la autenticación, el servidor emite un token (por ejemplo, JWT o algún otro token) que se almacena como una cookie con indicadores "HttpOnly" + "Secure" para evitar que sea robado a través de XSS. Para evitar también XSRF / CSRF, el servidor emitirá un token XSRF que el cliente (aplicación) debe adjuntar para probar el origen de la solicitud
    • Pro: parece ser muy seguro
    • Con: requiere JavaScript y Cookies. Los usuarios que deshabilitan uno u otro están bloqueados
  • Tras la autenticación, el servidor emite un token (por ejemplo, JWT o algún otro token) que se almacena en LocalStorage y la aplicación cliente debe adjuntarlo a cada solicitud. Debe asegurarse de que no es posible ningún ataque XSS para evitar que el token sea robado.
    • Pro: seguro si se puede prevenir XSS. No requiere cookies.
    • Con: requiere una aplicación de JavaScript para ejecutar, almacenar y adjuntar el token. Los usuarios que deshabilitan JavaScript están bloqueados.

En general, no he visto una estrategia segura que funcione bien sin JavaScript. ¿Me estoy perdiendo de algo? ¿Estaría bien que el cliente de la aplicación web (JavaScript) utilice una estrategia de almacenamiento de cookies o de token local y se vuelva a la autenticación básica para el cliente solo de HTML? ¿Alguna otra idea?

    
pregunta user1211286 13.03.2018 - 13:17
fuente

0 respuestas

Lea otras preguntas en las etiquetas