Introducción

1

Qué necesitas para este curso y qué aprenderás sobre Node.js con Hapi

2

Conceptos principales de hapi y creación de nuestro primer servidor

3

Breve historia y estado actual

Creando un sitio básico con Hapi

4

El objeto h, response y sus herramientas

5

Uso de plugins - Contenido estático

6

Plantillas con Handlebars

7

Renderizado de vistas - Layout y template del home

8

Recibiendo parámetros en una ruta POST - Creación del registro

9

Definir una mejor estructura con buenas prácticas en Hapi

10

Validando la información - Implementando Joi

11

Introducción a Firebase

12

Creando un modelo y guardando en firebase

13

Implementando el login y validación del usuario

14

Autenticación de usuarios - Cookies y estado

15

Manejando errores

16

Visualización de errores

17

Controlar el error 404 en inert y el error de validación

18

Repaso - Creación del modelo y controlador para preguntas

19

Repaso - Creación de las rutas para crear preguntas

20

Listar las últimas preguntas en el home

Aplicacion de conceptos avanzados

21

Enrutamiento avanzado - visualizando una pregunta

22

Enrutamiento avanzado - respondiendo una pregunta

23

Generando la lógica de la plantilla según si es creador o contribuidor

24

Métodos de servidor - respuesta correcta

25

Usando métodos de servidor

26

Manejo del caché - Agregando el home al caché

27

Procesamiento de archivos - Aceptando imágenes

28

Logging con Good - Monitoreando el servidor

29

Creación de plugins - Teoría

30

Creación de plugins - Implementando un API REST

31

Estrategías de autenticación - Asegurando el API REST

32

Seguridad básica - Asegurando el servidor contra CSRF

33

Seguridad básica - Asegurando el servidor contra XSS

Herramientas de desarrollo

34

Depuración del proyecto

35

Ecosistema de Hapi

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Seguridad básica - Asegurando el servidor contra CSRF

32/35
Recursos

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.

Aportes 4

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Como ya hemos visto la dependencia esta obsoleta la nueva version es:

@hapi/crumb

cuando agrego crumb a los formularios, los contadores de respuestas dejan de contar, si alguien logra resolverlo que me pase info. saludos.

Buenas tardes, me gustaría saber si me pueden recomendar algún PlugIn para integrar la Autenticacion con ActiveDirectory, estuve viendo node-activedirectory, pero me gustaria ver algo mas apegadao a hapi para seguir el orden de este proyecto.

https://github.com/gheeres/node-activedirectory

    await server.register({
      plugin: crumb,
      options: {
        cookieOptions: {
          isSecure: process.env.NODE_ENV === 'prod'
        }
      }
    })
<input type="hidden" name="crumb" value={{crumb}} />