Seguridad con aplicación de una sola página

1

Estoy creando una aplicación SPA usando Angular. Esto servirá a mis dos propósitos para la capa intermedia en el sitio web para dispositivos móviles.

Ahora estoy tratando de proteger mi aplicación de XSS, CSRF y también quería un mecanismo de autenticación seguro. Mis servicios serán servicios sin estado de Resful.

Este es el flujo que creo que me ayudará.

  1. La aplicación del cliente envía el ID de usuario y la contraseña al servidor.
  2. El servidor valida la solicitud y genera el token que se almacenará en db.
  3. Este token = ID de usuario + Número aleatorio + Marca de tiempo
  4. el token se enviará de vuelta a la APP del cliente.
  5. la aplicación del cliente la almacenará en un almacenamiento local o cookie.
  6. Con cada solicitud posterior validaré el token con una tienda en db.

Áreas problemáticas

  1. ¿Dónde debe guardarse el token? ¿Cookie o almacenamiento local?
  2. En el servidor, el token debe almacenarse en algún lugar. Si se almacena en db que aumentará la carga en la base de datos.
  3. Como voy a usar la solicitud AJAX, ¿cómo debo pasar el encabezado o el cuerpo del token value?
  4. Desde este mismo código base que usaré también para mi sitio web, ¿qué tan seguro es este enfoque para el sitio web?
  5. ¿Cómo abordar el ataque CSRF en este caso?

Me he referido a Asegurando una aplicación de página única de JavaScript con backend RESTful también. Pero el almacenamiento de la ID de usuario nuevamente en Cookies creará un agujero de seguridad. Porque tanto el ID de usuario como el token se almacenan en el lado del cliente.

    
pregunta Dhiren Patel 07.07.2014 - 10:35
fuente

1 respuesta

1

Recomendaría utilizar OpenID para la autenticación. De esta manera, no tiene que manejar la autenticación y el almacenamiento / mantenimiento de las credenciales de usuario en su propia base de datos.

con respecto a CSRF, con angular es simple. Angular tiene un mecanismo incorporado que buscará un token CSRF en una cookie específica y luego lo enviará como un encabezado http en cada solicitud realizada con el módulo $ http de Angular. Lo que debe hacer su backend es rellenar (una vez por sesión) la cookie con un token aleatorio criptográficamente seguro (Angular recomienda un resumen del token de autenticación del usuario con un salt) y luego validar la corrección del encabezado http a petición en su API REST .

    
respondido por el aviv 07.07.2014 - 12:49
fuente

Lea otras preguntas en las etiquetas