Seguridad básica - Asegurando el servidor contra CSRF

Clase 32 de 35Curso de Node.js con Hapi

Resumen

Una de las vulnerabilidades más comunes en cualquier servidor o sitio web, es la Falsificación de Petición en Sitios Cruzados o CSRF por sus sigles del inglés Cross-site request forgery, que es un tipo de ataque en el que son transmitidos comandos no autorizados por un usuario del sitio web en el que deberíamos confiar.

Para atender y corregir esta vulnerabilidad incorporaremos a nuestro proyecto un módulo adicional de Hapi llamado crumb que utiliza un token de validación para cada una de las rutas accedidas por los usuarios.

Implementación

Una vez instalado con npm i crumb -S procedemos a registrarlo en el scrip principal, de la misma manera que hemos hecho antes con good.

const crumb = require('crumb')
...

await server.register({
  'plugin': crumb, 
  'options': {
    'cookieOptions': {
      'isSecure': process.env.NODE_ENV === 'prod'
    }
  }
})
...

Crumb utiliza una cookie para realizar la validación del token en cada una de las rutas de nuestra aplicación y la contrasta con el valor de un input de tipo hidden y de nombre crumb, que debe estar presente en cada una de las vistas.

La propiedad isSecure estaría entonces activa (en true) cuando estemos en el entorno de producción e inactiva (en false) mientras estemos en el entorno de desarrollo. Cuando no está presente el input de validación o su valor no es el correcto, el servidor devuelve un código de error 403 al browser, indicando que el acceso está prohibido o no está autorizado.