Seguridad del backend
Comprende las prácticas fundamentales de seguridad en backend, desde la autenticación y la autorización hasta las vulnerabilidades comunes y sus defensas.
Por qué importa la seguridad del backend
Los sistemas backend manejan datos sensibles y operaciones críticas, lo que los convierte en un objetivo principal para ataques si no están debidamente protegidos.
- Los backends almacenan datos sensibles como credenciales, información personal y financiera.
- La seguridad evita el acceso no autorizado y protege contra filtraciones de datos.
- Los ataques pueden dirigirse tanto a usuarios externos como a componentes internos del sistema.
Detalles
Los sistemas backend son responsables de manejar algunas de las partes más sensibles de una aplicación, incluidas las credenciales de usuario, los datos personales, los registros financieros y la comunicación interna entre servicios. Si estos sistemas se ven comprometidos, el impacto puede ser grave, desde filtraciones de datos hasta una interrupción completa del servicio.
La seguridad existe para imponer un control estricto sobre quién puede acceder al sistema y qué acciones tiene permitido realizar. Sin estos controles, cualquier cliente podría potencialmente acceder o modificar datos críticos.
Las amenazas comunes incluyen intentos de acceso no autorizado, filtraciones de datos a gran escala y ataques maliciosos diseñados para explotar vulnerabilidades del sistema. Estas amenazas son constantes en entornos de producción y deben ser defendidas activamente.
A alto nivel, la seguridad del backend introduce una capa de protección entre el cliente y el sistema. Cada solicitud debe pasar por controles de seguridad antes de llegar a la lógica de la aplicación. Estos controles garantizan que solo se ejecuten acciones válidas y autorizadas.
Autenticación
La autenticación verifica la identidad de un usuario o servicio antes de permitir el acceso al sistema.
- Los usuarios demuestran su identidad usando credenciales como contraseñas o tokens.
- Los sistemas validan estas credenciales antes de conceder acceso.
- La autenticación se aplica tanto a usuarios humanos como a servicios.
Detalles
La autenticación es el primer paso para asegurar un sistema backend. Responde a una pregunta fundamental: “¿Quién está haciendo esta solicitud?” Antes de permitir cualquier acción, el sistema debe verificar la identidad de quien la realiza.
Este proceso normalmente implica credenciales. Un usuario puede introducir una contraseña, presentar un token de sesión o usar una API key. En configuraciones más avanzadas, proveedores de identidad como Google o sistemas de autenticación empresariales pueden verificar la identidad en nombre de la aplicación.
Una vez que las credenciales se validan, el sistema considera verificada la identidad. Esto no significa que el usuario pueda hacer cualquier cosa; solo confirma quién es. Lo que se le permite hacer se gestiona por separado mediante la autorización.
Sin autenticación, los sistemas no tendrían forma de distinguir entre usuarios legítimos y actores maliciosos, lo que haría imposible un control de acceso seguro.
Autorización
La autorización determina qué puede hacer un usuario o servicio autenticado dentro del sistema.
- La autorización verifica los permisos después de que la identidad ha sido confirmada.
- El acceso se concede o se deniega según roles o políticas.
- Diferentes usuarios pueden tener distintos niveles de acceso a los recursos.
Detalles
Una vez que un usuario está autenticado, el sistema sabe quién es, pero aún necesita determinar qué acciones tiene permitido realizar. Ese es el papel de la autorización.
La autorización funciona verificando permisos. Por ejemplo, a un usuario normal solo se le puede अनुमति ver sus propios datos, mientras que un administrador puede tener la capacidad de eliminar cuentas o modificar la configuración del sistema. Estas reglas se aplican mediante roles, listas de control de acceso o sistemas basados en políticas.
El proceso sigue un flujo simple: un usuario autenticado realiza una solicitud, el sistema verifica sus permisos y luego permite o deniega la acción.
Sin una autorización adecuada, los usuarios autenticados podrían acceder o modificar datos a los que no deberían tener acceso, lo que provocaría graves vulnerabilidades de seguridad.
OAuth
OAuth permite a las aplicaciones acceder a los datos del usuario desde otro servicio sin manejar directamente las credenciales del usuario.
- Los usuarios se autentican a través de un proveedor externo de confianza.
- El proveedor emite un token de acceso a la aplicación.
- La aplicación usa el token para acceder de forma segura a los datos del usuario.
Detalles
OAuth es un protocolo diseñado para el acceso delegado. En lugar de compartir credenciales como contraseñas con varias aplicaciones, los usuarios se autentican con un proveedor de confianza (como Google), que luego concede acceso limitado a la aplicación mediante un token.
El flujo normalmente funciona así: el usuario elige iniciar sesión con un proveedor, el proveedor autentica al usuario y luego emite un token de acceso a la aplicación. Este token representa el permiso del usuario y puede usarse para acceder a recursos específicos.
Este enfoque mejora la seguridad porque la aplicación nunca ve ni almacena las credenciales reales del usuario. También permite un control detallado sobre qué datos puede acceder la aplicación.
OAuth se usa ampliamente para “Iniciar sesión con Google”, “Iniciar sesión con Facebook” e integraciones similares, lo que permite una autenticación segura de terceros y un intercambio de datos controlado.
JSON Web Tokens (JWT)
Los JWT son tokens compactos que transportan la identidad autenticada y se envían con cada solicitud para verificar al usuario.
- El servidor emite un JWT firmado después de una autenticación exitosa.
- El cliente almacena el token y lo incluye en solicitudes futuras para su verificación.
- El token codifica la identidad del usuario, los permisos y la expiración sin almacenamiento de sesión del lado del servidor.
Detalles
Los JSON Web Tokens (JWTs) son un método común para mantener la autenticación en sistemas sin estado. Después de que un usuario inicia sesión, el servidor genera un JWT y lo envía al cliente. Luego, el cliente incluye este token en solicitudes futuras, normalmente en el encabezado HTTP Authorization.
Un JWT contiene información codificada como el ID del usuario, los permisos y una hora de expiración. Estos datos están firmados por el servidor, lo que permite al backend verificar que el token no ha sido manipulado.
Como el token lleva toda la información de identidad necesaria, el servidor no necesita almacenar datos de sesión para cada usuario. Esto hace que los JWT sean eficientes y escalables, especialmente para sistemas distribuidos.
Sin embargo, los JWT deben manejarse con cuidado. Si un token se filtra, puede usarse para hacerse pasar por un usuario hasta que expire. Una expiración adecuada y un almacenamiento seguro en el cliente son fundamentales.
Hashing de contraseñas
Las contraseñas deben almacenarse como valores hash para que, incluso si los datos se exponen, las contraseñas originales no puedan recuperarse directamente.
- Las contraseñas se transforman usando una función hash de una sola vía antes de almacenarse.
- Durante el inicio de sesión, la contraseña ingresada se hashea y se compara con el hash almacenado.
- Algoritmos seguros como bcrypt, Argon2 y PBKDF2 están diseñados para resistir ataques.
Detalles
Almacenar contraseñas en texto plano es una falla de seguridad crítica. Si una base de datos se ve comprometida, los atacantes obtendrían acceso inmediato a todas las contraseñas de los usuarios. Para evitar esto, los sistemas almacenan versiones hasheadas de las contraseñas.
Una función hash toma una entrada (la contraseña) y produce una salida de longitud fija (el hash). Este proceso es de una sola vía, lo que significa que es computacionalmente inviable revertir el hash para obtener la contraseña original.
Cuando un usuario inicia sesión, el sistema hashea la contraseña ingresada y la compara con el hash almacenado. Si coinciden, la contraseña es correcta sin exponer nunca el valor original.
Los algoritmos modernos de hashing como bcrypt, Argon2 y PBKDF2 son intencionalmente lentos e incluyen características como salting para defenderse contra ataques de fuerza bruta y ataques precomputados. Esto los hace significativamente más seguros que las funciones hash básicas.
Falsificación de Solicitud entre Sitios (CSRF)
Los ataques CSRF aprovechan la sesión autenticada de un usuario para realizar acciones no deseadas sin su conocimiento.
Usuario (con sesión iniciada)
Navegador
Servidor
- Los atacantes engañan al navegador de un usuario que ha iniciado sesión para que envíe solicitudes no autorizadas.
- El servidor procesa la solicitud porque confía en la sesión del usuario.
- La protección depende de validar que las solicitudes provengan de fuentes confiables.
Detalles
La Falsificación de Solicitud entre Sitios (CSRF) ocurre cuando un sitio web malicioso hace que el navegador de un usuario envíe solicitudes a otro sitio en el que el usuario ya está autenticado. Como el navegador incluye automáticamente las cookies de sesión, el servidor asume que la solicitud es legítima.
Por ejemplo, si un usuario ha iniciado sesión en una aplicación bancaria y visita un sitio malicioso, ese sitio podría activar una solicitud oculta para transferir dinero. El servidor procesa la solicitud porque ve una sesión válida, aunque el usuario no tenía la intención de realizar esa acción.
Para prevenir ataques CSRF, los sistemas usan técnicas como tokens CSRF y cookies same-site. Los tokens CSRF son valores únicos incluidos en las solicitudes que el servidor verifica, asegurando que la solicitud se originó en la aplicación correcta. Las cookies same-site restringen cuándo se envían las cookies, reduciendo el riesgo de solicitudes entre sitios.
Sin una protección CSRF adecuada, los atacantes pueden aprovechar sesiones de usuario confiables para realizar acciones dañinas sin acceso directo a las credenciales del usuario.
Cross-Site Scripting (XSS)
Los ataques XSS inyectan scripts maliciosos en páginas web, haciendo que se ejecuten en los navegadores de otros usuarios.
- La entrada de usuario no confiable puede inyectarse y ejecutarse como código en el navegador.
- Los atacantes pueden robar datos de sesión o manipular las interacciones del usuario.
- La defensa requiere un manejo estricto de todo el contenido proporcionado por el usuario.
Detalles
Cross-Site Scripting (XSS) ocurre cuando una aplicación incluye entrada de usuario no confiable en una página web sin validarla o escaparla correctamente. Esto permite a los atacantes inyectar scripts que se ejecutan en el navegador de otros usuarios.
Por ejemplo, si un campo de comentarios permite HTML o JavaScript sin procesar, un atacante podría insertar un script que se ejecute cada vez que otro usuario vea la página. Este script podría robar cookies, capturar la entrada del usuario o realizar acciones en nombre del usuario.
Para prevenir XSS, los sistemas deben tratar toda la entrada del usuario como no confiable. La sanitización de entrada elimina contenido potencialmente peligroso, mientras que el escape de salida garantiza que los datos se representen como texto en lugar de código ejecutable. Las Content Security Policies (CSP) añaden una capa adicional de protección al restringir qué scripts pueden ejecutarse.
Sin defensas adecuadas, las vulnerabilidades XSS pueden comprometer cuentas de usuario y socavar la seguridad de toda la aplicación.
Gestión de secretos
La gestión de secretos garantiza que las credenciales sensibles se almacenen, accedan y roten de forma segura sin exponerse en el código ni en los sistemas.
- Los secretos incluyen claves de API, credenciales de bases de datos y claves de cifrado.
- Nunca deben estar codificados de forma fija ni expuestos en el código fuente.
- Los sistemas seguros controlan el acceso y rotan los secretos con regularidad.
Detalles
Los sistemas backend dependen de credenciales sensibles para comunicarse con bases de datos, servicios externos y componentes internos. Estos secretos incluyen claves de API, contraseñas de bases de datos y claves de cifrado, y todos deben protegerse contra el acceso no autorizado.
Almacenar secretos directamente en el código o en archivos de configuración supone un gran riesgo de seguridad. Si el código fuente se expone, todas las credenciales incrustadas quedan comprometidas de inmediato. En su lugar, los secretos deben almacenarse en sistemas dedicados diseñados para un almacenamiento seguro y un acceso controlado.
Los gestores de secretos como AWS Secrets Manager y HashiCorp Vault proporcionan almacenamiento centralizado, control de acceso y rotación automática de credenciales. A veces se usan variables de entorno para configuraciones más simples, pero aun así requieren un manejo cuidadoso.
Una gestión adecuada de secretos reduce el riesgo de filtraciones de credenciales y garantiza que los sistemas puedan acceder de forma segura a los recursos que necesitan sin exponer información sensible.
Limitación de tasa como protección de seguridad
La limitación de tasa actúa como un control de seguridad al restringir el volumen de solicitudes para prevenir abusos y ataques de denegación de servicio.
- Limita el número de solicitudes que un cliente puede hacer dentro de una ventana de tiempo.
- Protege endpoints como login y APIs contra ataques de fuerza bruta y abuso.
- Las solicitudes excesivas se bloquean o se retrasan una vez que se superan los límites.
Detalles
La limitación de tasa no es solo una herramienta de rendimiento: es un mecanismo de seguridad crítico. Al controlar cuántas solicitudes puede enviar un cliente, los sistemas pueden prevenir abusos como intentos de inicio de sesión por fuerza bruta o ataques de denegación de servicio.
Por ejemplo, limitar los intentos de inicio de sesión reduce la efectividad de los ataques de adivinación de contraseñas. De manera similar, aplicar cuotas de solicitudes a la API evita que un solo cliente sature los servicios de backend.
El proceso es sencillo: las solicitudes entrantes se comparan con un límite definido y, si se supera el umbral, la solicitud se rechaza o se retrasa. Esto garantiza un uso justo y protege los recursos del sistema.
Cuando se combina con otras medidas de seguridad, la limitación de tasa fortalece significativamente la resiliencia del sistema frente al tráfico malicioso y el uso indebido.
Sección de preguntas
1 / 5
Esta lección forma parte del contenido premium
Pásate al plan premium para eliminar el desenfoque y desbloquear la lectura completa.