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

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Seguridad básica - Asegurando el servidor contra XSS

33/35
Recursos

Otra de las vulnerabilidades que es muy común es XSS o Cross-site scripting, que es un tipo de ataque de seguridad por inyección en el que un atacante inyecta datos o algún script o códio malicioso desde otro sitio web diferente.

Para manejar y corregir esta vulnerabilidad en la seguridad de nuestra aplicación implementaremos la estrategia de CSP o Content Security Policy para definir específicamente los orígenes desde los cuales vamos a permitir la ejecución de scripts o el acceso a recursos desde y hacia nuestra aplicación. Para esto usaremos un par de plugins adicionales: Blankie y scooter (scooter por ser dependencia de blankie).

Instalamos ambos desde la terminal: npm i blankie scooter -S y requerimos ambos en nuestro script principal.

Al igual que los plugins anteriores, registramos blankie con las siguientes opciones:

await server.register ([ scooter, {
  'plugin': blankie,
  'options': {
    'defaultSrc': `'self' 'unself-inline' <urls adicionales>`,
    'styleSrc': `'self' 'unself-inline' <urls adicionales>`,
    'fontSrc': `'self' 'unself-inline' <urls adicionales>`,
    'scriptSrc': `'self' 'unself-inline' <urls adicionales>`,
    'generateNonces': false
  }
}])

Finalmente, al acceder a nuestra aplicación, notaremos que sólo serán permitidos los scripts y recursos que provengan desde las fuentes explícitamente definidas en las opciones indicadas al registrar el plugin, de lo contrario simplemente no se cargarán.

Si quieres aprender más sobre temas de Seguridad en la web, te invito a ver luego el Curso de Análisis de Vulnerabilidades Web con OWASP.

Aportes 5

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Les dejo la versión actualizada del proyecto. Hasta el momento algunas cosas cambiaron.
Saludos.

al parecer blankie ya no usa scooter sino @hapi/scooter porque no me encontraba el plugin hasta que instalé el otro

La documentación de los plugins es lamentable. Poca o nula información :face

A mi no me sirve @hapi/scooter. Sale que la version de hapi no la acepta 😦

Para instalar el plugin de blankie, en la nueva versión de Hapi que se realiza mediante la dependencia @hapi/hapi, hay que hacerlo de la siguiente manera:

  • Importar las 2 dependencias:
const blankie = require('blankie');
const scooter = require('@hapi/scooter');
  • Registrarlas de la siguiente manera, de igual manera a como lo hace el profesor, pero solamente asegurando que se registre también el plugin de scooter
await server.register([scooter, {
    plugin: blankie,
    options: {
        defaultSrc: `'self' 'unsafe-inline'`,
        styleSrc: `'self' 'unsafe-inline' https://maxcdn.bootstrapcdn.com`,
        fontSrc: `'self' 'unsafe-inline' data:`,
        scriptSrc: `'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://maxcdn.bootstrapcdn.com https://code.jquery.com`,
    }
}]);

Ya con esto funciona, me basé en la documentación del plugin: https://github.com/nlf/blankie/