5 consejos para que tu API REST sea más seguro

Поделиться
HTML-код
  • Опубликовано: 30 июл 2024
  • En este video te cuento 5 recomendaciones que nos da OWASP para mejorar la seguridad de nuestros APIs REST.
    Cheat sheet de OWASP: cheatsheetseries.owasp.org/ch...
    MIS CURSOS
    📐 Arquitectura de Software: manuelzapata.co/ars
    🔌 Patrones de Diseño: manuelzapata.co/curso-pdd
    📦 Programación Profesional con Objetos (Gratis): manuelzapata.co/objetos
    🌲 Principios de Diseño SOLID (Gratis): manuelzapata.co/mcp
    🙌 Hazte miembro del canal: / @manuelzapata
    🌎 Mi sitio web: manuelzapata.co
    🎦 Suscríbete al canal: manuelzapata.co/suscribete
    📩 Mi lista de correo: manuelzapata.co/lista
    Secciones
    00:00 - Introducción
    00:47 - Consejo # 1 - Utilizar HTTPS
    01:38 - Consejo # 2 - Poner autenticación y autorización en los endpoints
    03:22 - Consejo # 3 - Utilizar Json Web Tokens
    05:00 - Consejo # 4 - No poner información sensible en la URL
    05:45 - Consejo # 5 - Validar los parámetros de entrada
    07:24 - Preguntas finales y Cierre
  • НаукаНаука

Комментарии • 86

  • @Danyospina27
    @Danyospina27 2 года назад +3

    Excelente video, claro y concreto. Muchas gracias Manuel

  • @javierrenteria3195
    @javierrenteria3195 2 года назад +11

    "tu backend ya valió". Hahahahahahaa. Es verdad.

  • @CesarSilvaR
    @CesarSilvaR 2 года назад +1

    Excelente información, el contenido de tus videos es super valioso. Muchas gracias por compartir

  • @rodrigofigue
    @rodrigofigue 2 года назад +1

    muy interesante, esto es oro para quien esta aprendiendo y quiere consejos de seguridad

  • @NatanRobles
    @NatanRobles 2 года назад

    ¡Consejos buenos y válidos... excelente!

  • @studipitytries
    @studipitytries 2 года назад

    Genial. Gracias por la info!

  • @Juan-hg2ts
    @Juan-hg2ts 2 года назад

    Excelente, gracias

  • @nelligescorcia
    @nelligescorcia Год назад +2

    La inyección de código desde hace tiempo la conozco pero hasta ahora no la he implementado, gracias por lo de let's encript me vas ahorrar mucho 🎉🎉, chévere si haces un video sobre librerías que faciliten esa aplicación, yo normalmente he trabajado con .net, Java y js(express para backend y vue front)

  •  2 года назад

    Muy buenos consejos, sabía unos cuantos pero otros no. Gracias

  • @martineduardovega724
    @martineduardovega724 2 года назад

    gracias por compartir este conocimiento!!

  • @gustavoayala7385
    @gustavoayala7385 2 года назад

    Muchas gracias por el contenido de buena calidad constante. Muy util los consejos. Una cuestión que me surgió es diferenciar entre la utenticación de la aplicación cliente (digamos un fronend en nuxt.js o una app de celular) y la autenticación de un usuario. A esto también se encuentra la cuestión de los endpoints que no requieren autenticación para "invitados" (guests), me parece que habría que agregar que aquí sería importante incorporar algún tipo de throttling para evitar ataques de fuerza bruta en el login, o DoS (Denial of Services) en los demás servicios.

  • @roy_c
    @roy_c 2 года назад +6

    Agregaria tener cuidado con los logs. Evitar loguear información sensible, o si es necesario aplicar una máscara.
    Muchas veces ponemos logs de debug para ver los inputs y despues ahi quedan, logueandose en texto plano las passwords, secrets, keys, etc.

    • @erickjhormanromero6905
      @erickjhormanromero6905 2 года назад

      si eso es muy importante pero eso se puede organizar con applicacion como elastick logs o se configura el server para que todo log que vea lo convierta en .INFO por ejemplo, AWS secrets o vault para el manejo de la data sensible

    • @SimaDamian
      @SimaDamian 2 года назад +1

      Me paso que puse un sistema de log que logeaba cada request a base de datos y los datos de body... entonces en definitiva terminaba logeando los password cuando el usuario invocaba el auth/login. :( no generó problema porque nos dimos cuenta en testing.

  • @PabloMartinez-sz6pv
    @PabloMartinez-sz6pv 2 года назад +3

    Hola Manuel, que calidad de contenido (HD), siempre que veo tus vídeo algo bueno me llevo, o para saber qué tan bien estoy con lo que hago. Como práctica adicional me encontré con que la otra vez en un servicio había que saltear el API key , sumado con el nombre de usuario y la fecha actual , no se qué tan buen práctica sea pero cada vez que había que usar ese servicio daba demasiado asco.
    Gracias por compartir Manuel un saludo 👋

  • @newzord
    @newzord 2 года назад

    Excelente video!!! 👍🏻

  • @mirxtremapps
    @mirxtremapps 2 года назад

    Tener cuidado con que guardamos en el payload del jwt y no dejar el secret expuesto. Acabo de encontrar este canal, muy completo felicitaciones bro!

  • @cristianaguilar4170
    @cristianaguilar4170 2 года назад

    Excelente 👌

  • @alexandrohdez3982
    @alexandrohdez3982 2 года назад

    Excelente video

  • @JRicharDavidG
    @JRicharDavidG 2 года назад

    Muy bueno y útil tu canal, felicidades. 🎉
    Le agregaría cifrado hibrido

  • @AnthonyShelby
    @AnthonyShelby 2 года назад +1

    Gracias Manuel , muy bien explicado y de mucha ayuda !

    • @ManuelZapata
      @ManuelZapata  2 года назад +1

      Me encanta leer eso. Gracias Anthony!

  • @cristiancalichio5335
    @cristiancalichio5335 2 года назад

    Muchas gracias Manuel por un nuevo aporte a la comunidad y por dejar material extra para profundizar!!! Saludos desde Argentina!

    • @ManuelZapata
      @ManuelZapata  2 года назад

      Con todo gusto Cristian! Saludos desde Colombia.

  • @MrOsnayder
    @MrOsnayder 2 года назад

    Super. A mi me falta mejorar la sanitización del código. Hasta donde va mi conocimiento en este tema, en el que estoy empezando, no se me ocurre algun consejo que haga falta aún. De acuedo a lo que he investigado, sí tengo entendido que los jwt son las mejor opción para autenticación.

  • @alejogallego6303
    @alejogallego6303 2 года назад +1

    Muy buen video Manuel, super el contenido.

  • @rko_182
    @rko_182 Год назад

    Fabuloso video Manuel, podrias subir uno que hable de Api Manager y Api Gateway he buscado pero no hay nada

  • @EdsonFerOropeza
    @EdsonFerOropeza 2 года назад

    No sabia sobre bleach, buenos consejos.

  • @edwinspiredev4930
    @edwinspiredev4930 2 года назад +1

    Excelente información, me encantó.

  • @seulflowstyle
    @seulflowstyle 2 года назад +1

    Class Validator en TypeScript y con NestJS es muy bueno, aprovechando una duda ¿como usar idle con JWT ? Saludos Manuel Zapata ya extrañaba tus videos

  • @rogergalindo6631
    @rogergalindo6631 Год назад

    Amigo muy buen video. Justo ahorita estoy adentrandome en eso de la seguridad en el consumo de API REST... Una duda como poder evitar que la petición json no sea legible para un atacante y no la pueda interceptar al enviarla a un API REST desde un frontal

  • @iorusoul
    @iorusoul 2 года назад

    Tambien es bueno exponer las apis detras de proxies inversos oara proteger al servidor q presta el servicio, osar orm aeguras para evitar inyecciones de sql , utilizar dtos para evitar que los usuarios conozcan las estructuras principales de los datos al transferirse. Guardar las keys secretas en los lugares que deberian para que nunca se filtren y esten en una zona segura del servidor, deshabilitar accesos remotos en puntos innecesarios. Etc etc etc

  • @1986elkin1
    @1986elkin1 2 года назад

    Excelente, en mi aplicaciones el concejo 5 siempre lo paso por alto o se me olvida

  • @AndresSossa
    @AndresSossa 2 года назад +3

    Super buen video, otra seria tener una lista blanca de dominios desde donde te pueden invocar, casos específicos

    • @ManuelZapata
      @ManuelZapata  2 года назад +1

      Buenísimo! SI no es un API público y sabemos previamente desde donde es válido que invoquen, es una buena práctica!

  • @luimost
    @luimost 2 года назад

    Agradecido por tu video (Y)

  • @computacionysistemastomaso7270
    @computacionysistemastomaso7270 2 года назад +1

    Excelente recomendaciones, nunca he usado la 3,5 y tenía fallas en la 4.
    Con respecto a la 5ta Recomendación sanitization = desinfección
    Sigo investigando para conseguir otras sugerencias de seguridad.

  • @joseangelramirezhernandez3269
    @joseangelramirezhernandez3269 2 года назад +10

    Yo agregué otro feacture a mi api y es el siguiente siempre que un usuario se autentica en mi api genero el token y genero otro id único y lo guardado encriptado en mi base de datos y en cada petición que hace el usuario pues valido ese id único en mi caso en específico un usuario no puede estar logueado más de una vez en un dispositivo, haciendo esto me garantiza que siempre habrá una sola session activa y que si un usuario pierde su dispositivo lo que se hace es que esa key única se resetea y automáticamente ya el dispositivo extraviado/ perdido ya no podrá utilizar dicha app

    • @FrankJaimeFabianPuente-sy1yr
      @FrankJaimeFabianPuente-sy1yr 2 года назад +1

      Hago lo mismo en mis sistemas, me funciona bien por ahora

    • @ManuelZapata
      @ManuelZapata  2 года назад +2

      Interesantísimo, Jose Angel! Generas una especia de "Device ID". Algunas aplicaciones también lo usan para llevar registro de los dispositivos que el usuario ha usado. Gracias por compartir!

    • @erickjhormanromero6905
      @erickjhormanromero6905 2 года назад +2

      pero pienso que en cada peticion hacer un llamado a base de datos no seria una buena opcion en recursos y costos por ejemplo si me hacen 1000 peticiones diarias, pienso que podrias mejoralo usando el mismo enfoque pero guardando ese valor en redis y asi evitas muchos llamados a la base de datos , no se si ese es tu ejemplo real en tu sistema o si no usar AWS para eso

    • @joseangelramirezhernandez3269
      @joseangelramirezhernandez3269 2 года назад +2

      @@erickjhormanromero6905 gracias por la sugerencia pero en mi caso cada petición involucra el acceso a la base datos pero no está mala tu sugerencia es válida y aceptable

    • @abnergranados9915
      @abnergranados9915 2 года назад

      Al ser un api, pueden ocurrir diferentes sesiones para un mismo usuario, desde dispositivos móviles u otros equipos, eso no limitaría el uso?

  • @247431
    @247431 2 года назад +2

    Vale la pena poner autenticación o JWT a las API si son usuarios no autenticados y se llama desde el cliente? creo que falta validación CORS y API Gateway

    • @SimaDamian
      @SimaDamian 2 года назад +1

      Yo implemento así: El cliente web usa JWT con lo cual cada request que realiza sobre la api se valida como JWT con caducidad y su correspondiente refreshToken (manejado por authentication) en simultaneo defino las API_KEY usadas por los clientes estaticos como un JWT porque de esta forma puedo definir dentro del mismo API_KEY los permisos que tendra ese cliente en particular.
      La diferencia está en el JWT de API_KEY es sin caducidad y debe estar en un archivo de configuracion. mientras que el JWT estandar esta definido por cada login / refreshToken

  • @RicardoHernandez-vr1bp
    @RicardoHernandez-vr1bp 2 года назад

    me falta mejorar en los parametros que no se ejecute el código malicioso como javascritpt y la implementacion de una identidad digital, a traves de la criptografia es un tema muy interesante

  • @JoseLuis-sr4xw
    @JoseLuis-sr4xw 2 года назад

    Muy interesante, por cierto, una API REST es diferente a los Microservicios que tanto escucho ? o son lo mismo?

    • @ManuelZapata
      @ManuelZapata  2 года назад

      Son dos conceptos diferentes. Un API REST se podría usar o no con microservicios. Puede haber microservicios con o sin APIs REST.

  • @jhonrodriguez3067
    @jhonrodriguez3067 2 года назад

    que solo se debe permitir el ingreso de datos necesarios, es decir, si tenemos parámetros de entradas en nuestra clase que no se utilizan , no exponerlos , indicar que datos son serializables y validar el dominio de los datos

    • @ManuelZapata
      @ManuelZapata  2 года назад

      Importante! Gracias por el aporte, Jhon!

  • @freddycastillo9385
    @freddycastillo9385 2 года назад

    Pregunta de principiante.. para ssl debo tener obligado?

    • @ManuelZapata
      @ManuelZapata  2 года назад

      Podrias volver a escribir la pregunta? No entendí.

  • @Jel.Awesh.M
    @Jel.Awesh.M 2 года назад

    ¿Cómo manejarías el hecho de que un API sea llamdo multiples momentos por el cliente? Ya sea que por que el cliente no tiene validación alguna y le den click muchas veces a un botón o que incluso haya algún tipo de boto haciendo varias llamadas.

    • @SimaDamian
      @SimaDamian 2 года назад

      Hola, Si es una API REST no tiene la responsabilidad de contemplar ese caso. Desde mi punto de vista veo dos Puntos: 1 - porque motivo tu cliente esta invocando varias veces lo mismo? es un bug del cliente. 2 - si es un ataque (aplicacion de tercero) tendrías que ver la forma de invalidar dicho cliente y agregarlo a a una lista negra y no procesar sus consultas dada que parecen que pueden dañar el funcionamiento normal tu sistema. Pero eso se tendría que hacer en una capa de infrestrucutura.

    • @Jel.Awesh.M
      @Jel.Awesh.M 2 года назад

      @@SimaDamian gracias por responder, en este caso el cliente está fuera de nuetro poder, así que sólo podemos nos queda asegurar nuestro API.

    • @FcoJavierNW
      @FcoJavierNW Год назад

      Saludos, en ese caso lo mejor es contar con seguridad perimetral y en ella colocar los umbrales de DoS (Denial of Service). Teniendo varios sitios en una granja de servidores hacerlo en las aplicaciones es más desgastante.
      Si optas por hacerlo en tus aplicaciones, solicita que te envíen las cabeceras X-Forwarded-For, desde el Firewall, sino solo ves la IP del balanceador desde tu aplicación.

  • @transformers886
    @transformers886 2 года назад

    casbin tan dinamico es para el acceso a las api

  • @moviedomof
    @moviedomof 2 года назад

    jwt es muy util pero se pueden robar y hay que implementar un sistema de invalidacion. estaria bueno que alguien explique bien algun mecanizmo de resolucion , Muchos usan invaidar por [ip+userGuid] pero es problema cuando hay un nginx por delante. y por otras cosas
    saludos

  • @jimezam
    @jimezam 2 года назад

    * Sanear 👍

  • @moisescaicedo4078
    @moisescaicedo4078 2 года назад +1

    He encontrado aplicaciones que envían las credenciaes de base de datos desde el frontend 😭😭😄😄

  • @erickjhormanromero6905
    @erickjhormanromero6905 2 года назад

    Okta compro auth0

    • @ManuelZapata
      @ManuelZapata  2 года назад +1

      Buenísimo el dato. No sabía.

    • @erickjhormanromero6905
      @erickjhormanromero6905 2 года назад

      @@ManuelZapata Yup entonces a usar Okta. deberias hacer un video de las ventajas de okta y hasta hacer un mano a mano entre okta y keycloak para este apartado. claro esta desde el punto de vista de arquitecturas