Seguridad web
La seguridad web es el conjunto de prácticas, técnicas y herramientas que buscan proteger las aplicaciones web y sus datos frente a accesos no autorizados, ataques maliciosos y comportamientos inesperados.
Una aplicación web insegura puede exponer:
- Datos personales de usuarios (contraseñas, correos, datos bancarios).
- Información confidencial de la empresa.
- La infraestructura del servidor.
- La integridad del propio servicio.
La seguridad no es una funcionalidad añadida al final del desarrollo. Debe integrarse desde el principio del ciclo de vida del software.
Seguridad en el lado del backend
Aunque la seguridad afecta a todas las capas de una aplicación, el backend es especialmente crítico porque es donde ocurre la lógica de negocio, el acceso a la base de datos y la gestión de la autenticación.
A continuación, veremos las principales responsabilidades del backend en materia de seguridad.
Validación y sanitización de entradas
Nunca se debe confiar en los datos que llegan del cliente. Cualquier dato introducido por el usuario (formularios, parámetros de URL, cabeceras, cookies) debe ser validado y saneado antes de procesarlo.
// ❌ Peligroso: usar directamente el input del usuario
const nombre = req.body.nombre;
db.query(`SELECT * FROM usuarios WHERE nombre = '${nombre}'`);
// ✅ Seguro: validar antes de usar
const { body, validationResult } = require('express-validator');
Autenticación y autorización
- Autenticación: ¿quién eres? (login, tokens JWT, OAuth…)
- Autorización: ¿qué puedes hacer? (roles, permisos, scopes…)
Es un error muy común autenticar correctamente pero no verificar si el usuario tiene permiso para acceder a un recurso concreto.
Gestión segura de contraseñas
Las contraseñas nunca deben almacenarse en texto plano. Se deben usar funciones de hashing diseñadas específicamente para contraseñas:
const bcrypt = require('bcrypt');
// Guardar contraseña
const hash = await bcrypt.hash(passwordPlano, 12);
// Verificar contraseña
const coincide = await bcrypt.compare(passwordPlano, hash);
Control de errores y logging
Los mensajes de error detallados (stack traces, nombres de tablas, versiones de librerías) pueden dar pistas valiosas a un atacante.
// ❌ Expone información interna
res.status(500).json({ error: err.stack });
// ✅ Mensaje genérico al cliente, detalle solo en logs internos
console.error(err);
res.status(500).json({ error: 'Ha ocurrido un error interno.' });
Comunicaciones seguras (HTTPS)
Todo el tráfico entre cliente y servidor debe ir cifrado mediante TLS/HTTPS. En texto plano, cualquier intermediario puede leer o modificar los datos (ataque Man-in-the-Middle).
Principio de mínimo privilegio
Cada componente del sistema debe tener solo los permisos estrictamente necesarios:
- El usuario de la base de datos de la aplicación no debería tener permisos de administrador.
- Una ruta de lectura no debería poder escribir en la base de datos.
El modelo de amenazas (Threat Modeling)
Antes de securizar una aplicación, conviene plantearse:
- ¿Qué activos tenemos que proteger? (datos de usuarios, tokens, ficheros…)
- ¿Quién podría atacarnos y con qué motivación?
- ¿Cuáles son los vectores de ataque posibles?
- ¿Qué medidas mitigan cada amenaza?
OWASP Top 10
El proyecto OWASP (Open Worldwide Application Security Project) publica periódicamente una lista de las 10 vulnerabilidades más críticas en aplicaciones web. El Top 10 de OWASP es un informe actualizado de forma regular que subraya las preocupaciones de seguridad en el caso de la seguridad de las aplicaciones web, centrándose en los 10 riesgos más vitales. El informe es confeccionado por un equipo de expertos en seguridad de todo el mundo.
El top 10 de 2025 es el siguiente:
- A01:2025 - Broken Access Control
- A02:2025 - Security Misconfiguration
- A03:2025 - Software Supply Chain Failures
- A04:2025 - Cryptographic Failures
- A05:2025 - Injection
- A06:2025 - Insecure Design
- A07:2025 - Authentication Failures
- A08:2025 - Software or Data Integrity Failures
- A09:2025 - Security Logging and Alerting Failures
- A10:2025 - Mishandling of Exceptional Conditions