‫-: En esta conferencia,
‫usaremos dos paquetes más para mejorar la seguridad de nuestras aplicaciones, y
‫esta vez para realizar la desinfección de datos.
‫Entonces, la desinfección de datos básicamente significa
‫limpiar todos los datos
‫que ingresan a la aplicación de códigos maliciosos.
‫Entonces, código que está tratando de atacar nuestra aplicación.
‫En este caso, intentamos defendernos de dos ataques.
‫Entonces, escribámoslo y lo haremos,
‫digamos, justo aquí después del analizador corporal.
‫Este middleware aquí lee los datos
‫en la solicitud. cuerpo, y solo
‫después de eso podemos realmente limpiar esos datos, ¿verdad?
‫Este es un lugar perfecto para realizar la desinfección de datos.
‫Por lo tanto, haremos un saneamiento de datos contra la
‫inyección de consultas NoSQL y también un saneamiento de
‫datos contra ataques de scripting entre sitios.
‫Y ahora, antes de hacer
‫cualquier otra cosa, permítanme mostrarles por qué
‫es tan importante defenderse de este tipo de ataque.
‫Ahora simularemos una inyección de consulta NoSQL y espero
‫que se sorprenda tanto como yo cuando descubrí por primera
‫vez lo poderoso que puede ser.
‫Vayamos ahora a Postman aquí e intentemos
‫iniciar sesión como alguien, incluso
‫sin saber su dirección de correo electrónico.
‫Muy bien, básicamente, simplemente dando una contraseña, digamos esta aquí,
‫podremos iniciar sesión, pero incluso sin saber
‫la dirección de correo electrónico.
‫Nuevamente, lo haremos
‫simulando una inyección de consulta NoSQL, y
‫la forma más sencilla de hacerlo es así.
‫En lugar de especificar un
‫correo electrónico real, básicamente especificamos esta consulta.
‫Usamos el operador MongoDB mayor que
‫y lo configuramos igual a nada, ¿de acuerdo?
‫¿Y ahora que pasa?
‫De hecho, ahora estamos conectados como administrador.
‫Como puede ver, incluso obtuvimos nuestro token de acceso.
‫Sí, realmente ahora estamos conectados, y esto me
‫deja completamente alucinado, ¿de acuerdo?
‫Nuevamente, sin conocer la dirección
‫de correo electrónico, solo la contraseña, pudimos iniciar sesión.
‫Y créame, no es realmente difícil
‫encontrar un montón de contraseñas realmente populares que se utilizan
‫en todas las aplicaciones.
‫Entonces, este tipo de ataque es contra lo que debemos protegernos.
‫Esto funciona básicamente porque siempre será cierto, así que en
‫realidad también lo ves en Compass.
‫Así que lo estoy copiando, o en realidad, copiemos todo esto.
‫Luego intente filtrar por exactamente lo mismo.
‫Ahora solo nos faltan las
‫llaves, pero ahora obtenemos una consulta válida.
‫Presionemos Buscar y, de hecho, esto devuelve todos los usuarios.
‫Básicamente, todos los usuarios coinciden con esta consulta.
‫Nuevamente, es porque esto aquí siempre es cierto.
‫Eso luego seleccionará todos los nombres de usuario.
‫Esa inyección de consulta maliciosa aquí
‫nos permitió iniciar sesión solo sabiendo esta contraseña, ¿de acuerdo?
‫Entonces, para protegernos contra esto, instalemos
‫otro middleware, y
‫este se llama express-mongo-sanitize, y ya que estamos aquí, también
‫vamos a instalar el otro que
‫vamos a necesitar, pero luego
‫en este video, que se llama simplemente XSS.
‫En realidad, eso no era correcto; se llama XSS_clean.
‫Necesitamos continuar y desinstalar el otro.
‫NPM desinstalar XSS.
‫Echemos un vistazo a nuestro paquete. json, y de hecho se ha ido.
‫Nuevamente, XSS_clean es el que queremos usar.
‫De todos modos, primero, hablemos
‫de la inyección de consultas NoSQL nuevamente.
‫Todo lo que vamos a usar es, y
‫por supuesto, primero debemos
‫requerirlo, por lo que const mongoSanitize es igual a express-mongo-sanitize.
‫Nuevamente, VS Code aquí me ayuda, y como estamos aquí,
‫también requeriremos el siguiente.
‫La variable que necesito se llama
‫XSS, y luego el nombre del módulo es XSS_clean.
‫Entonces, usemos ahora este mongoSanitize aquí, aquí mismo.
‫MongoSanitize es una función a la que llamaremos, que
‫luego devolverá una función de middleware, que
‫luego podremos usar.
‫Esto es suficiente para prevenirnos contra el
‫tipo de ataque que acabamos de ver antes.
‫Entonces, lo que hace este middleware es
‫mirar el cuerpo de la solicitud, la cadena de consulta de la solicitud
‫y también la Solicitud. Params, y luego
‫básicamente filtrará todos los
‫signos y puntos de dólar, porque
‫así es como se escriben los operadores de MongoDB.
‫Al eliminar eso, bueno, estos operadores ya
‫no van a funcionar.
‫Intentémoslo de nuevo.
‫Nuevamente, eliminará todos estos signos de dólar.
‫Entonces, si hago esto ahora, obtenemos
‫este error y ya
‫no podemos usar este truco aquí,
‫este ataque de inyección de consultas, para iniciar sesión.
‫Entonces, eso soluciona el primer problema,
‫pero ahora usemos ese
‫otro middleware que también necesitábamos antes.
‫Entonces, app. use y XSS, ¿de acuerdo?
‫Esto luego limpiará cualquier entrada
‫del usuario del código HTML malicioso, básicamente.
‫Imagine que un atacante intentaría insertar
‫un código HTML malicioso
‫con algún código JavaScript adjunto.
‫Si eso luego se inyectara en nuestro sitio HTML,
‫realmente podría causar algún daño.
‫Con este middleware, lo
‫evitamos básicamente convirtiendo todos estos símbolos HTML.
‫Como dije antes, la validación de Mongoose en
‫sí misma ya es una muy buena protección contra XSS, porque
‫realmente no permitirá que ninguna locura
‫entre en nuestra base de datos, siempre
‫que la usemos correctamente.
‫Siempre que pueda, simplemente agregue algo de validación a sus
‫esquemas de Mongoose, y eso debería protegerlo principalmente
‫de las secuencias de comandos entre sitios, al menos en el lado del servidor.
‫Probemos muy rápidamente este middleware aquí también.
‫Lo que voy a hacer es simplemente crear
‫un nuevo usuario, y llamémoslo "tester" aquí o algo así.
‫La contraseña es correcta y aquí,
‫en el nombre, agreguemos un código HTML.
‫Entonces, div con la identificación de código incorrecto.
‫Está bien, intentemos eso ahora.
‫Verá que el módulo XSS que
‫usamos realmente convirtió estos símbolos
‫HTML aquí, principalmente este, en esta entidad HTML aquí.
‫Eliminemos rápidamente a este tipo.
‫No lo necesitamos en absoluto. (Risas) Esa es
‫nuestra protección rápida y fácil contra algunos de
‫estos ataques mediante la desinfección de datos.
‫También recuerde que la biblioteca de funciones de validación
‫que usamos antes también tiene
‫un par de funciones de desinfección interesantes.
‫También podríamos construir manualmente algún middleware usando estos,
‫pero nuevamente, eso no
‫es realmente necesario, porque Mongoose ya impone un esquema estricto.
‫Luego, si encuentra algo
‫extraño, arrojará un error, y sí, eso
‫ya es una protección bastante buena.
‫Entonces, casi hemos terminado con la parte de seguridad.
‫Todo lo que necesitamos hacer
‫en el siguiente video es prevenir la contaminación de parámetros.