Seguridad web: las 10 amenazas más comunes y cómo proteger tu sitio
La seguridad web no es un feature que agregás después. Es un requisito fundamental que afecta cada línea de código que escribís, cada servicio que integrás y cada despliegue que hacés. En 2025, el 43% de los ataques cibernéticos apuntaron a PyMEs, y el costo promedio de una brecha de datos para PyMEs superó los $120,000 USD.
Esta guía cubre las 10 amenazas de seguridad web más comunes en 2026, con soluciones prácticas e implementables para cada una. No es consejo de seguridad teórico. Estas son las vulnerabilidades que encontramos con más frecuencia en codebases que auditemos, y las soluciones que implementamos para nuestros clientes.
1. Inyección SQL
La inyección SQL sigue siendo la vulnerabilidad web más peligrosa, a pesar de ser bien entendida desde hace más de dos décadas. Ocurre cuando la entrada del usuario se concatena directamente en consultas SQL, permitiendo a un atacante ejecutar comandos arbitrarios en la base de datos.
Impacto real: Un atacante puede leer todos los datos de tu base de datos, modificarlos o eliminarlos, y en algunos casos ejecutar comandos del sistema operativo en el servidor de base de datos.
La solución: Usá queries parametrizados o un ORM como Prisma, Drizzle o Sequelize. Nunca concatenes entrada del usuario en strings SQL.
```javascript // Mal const query = `SELECT * FROM users WHERE email = '${email}'`;
// Bien const query = 'SELECT * FROM users WHERE email = $1'; const result = await db.query(query, [email]); ```
2. Cross-Site Scripting (XSS)
Las vulnerabilities XSS permiten a atacantes inyectar scripts maliciosos en páginas que ven otros usuarios. Hay tres tipos: XSS almacenado (script guardado en base de datos), XSS reflejado (script en URL) y XSS basado en DOM (script ejecutado en el navegador).
Impacto real: Robo de sesiones, robo de credenciales, defacement y redireccionamiento de usuarios a sitios maliciosos.
La solución: Sanitizá toda la entrada del usuario del lado del servidor. Usá headers Content Security Policy (CSP) para restringir qué scripts pueden ejecutarse. React y Next.js escapan automáticamente el JSX, pero dangerouslySetInnerHTML evita esta protección.
```javascript // Mal - vulnerabilidad XSS <div dangerouslySetInnerHTML={{ __html: userContent }} />
// Bien - sanitizar primero import DOMPurify from 'dompurify'; <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(userContent) }} /> ```
3. Cross-Site Request Forgery (CSRF)
Los ataques CSRF engañan a usuarios autenticados para que realicen acciones que no pretendían. Un atacante crea una página maliciosa que hace requests a tu aplicación usando la sesión de la víctima.
La solución: Usá tokens CSRF para todas las operaciones que cambian estado. Configurá cookies SameSite a `Strict` o `Lax`. Verificá los headers Origin y Referer en endpoints sensibles.
```javascript // Configurar cookie SameSite Set-Cookie: session=abc123; SameSite=Strict; Secure; HttpOnly ```
4. Autenticación rota
La autenticación débil es el punto de entrada más común para ataques. Esto incluye contraseñas débiles, falta de autenticación de dos factores, tokens de sesión que no expiran y endpoints de login sin rate limiting.
La solución: - Forzá contraseñas fuertes (mínimo 12 caracteres, sin patrones comunes) - Implementá MFA para todas las cuentas de admin y sensibles - Usá JWTs de corta duración (15 minutos) con tokens de refresh - Rate limit en intentos de login (5 intentos por 15 minutos por IP) - Bloqueá cuentas después de 10 intentos fallidos - Usá bcrypt o Argon2 para hash de contraseñas (nunca MD5 o SHA1)
5. Dependencias vulnerables
El proyecto promedio de JavaScript tiene 150+ dependencias directas y 1,000+ dependencias transitivas. Cada una es un vector de ataque potencial. En 2025, hubo más de 28,000 vulnerabilidades reportadas en paquetes de npm.
La solución: - Ejecutá `npm audit` o `pnpm audit` semanalmente - Activá Dependabot o Renovate para actualizaciones automáticas - Usá lockfiles (package-lock.json, pnpm-lock.yaml) y nunca los modifiques manualmente - Revisá dependencias antes de agregarlas - Eliminá dependencias no usadas regularmente
6. Configuración insegura
Secretos hardcodeados, variables de entorno expuestas y servidores mal configurados son responsables de un porcentaje significativo de brechas. Los errores más comunes:
- API keys comprometidas en repositorios Git
- Credenciales de base de datos en código fuente
- Modo debug habilitado en producción
- Credenciales por defecto sin cambiar
- CORS configurado demasiado permisivamente
La solución: - Usá variables de entorno para todos los secretos - Agregá .env a .gitignore y verificá antes de cada commit - Usá un secrets manager (Vercel Environment Variables, AWS Secrets Manager) - Nunca logueés datos sensibles - Revisá la configuración CORS: solo permití tus dominios reales
7. Denegación de servicio (DDoS)
Los ataques DDoS inundan tu servidor con tráfico, haciendo tu aplicación no disponible. Mientras que los ataques DDoS a gran escala apuntan a empresas grandes, las aplicaciones pequeñas son vulnerables a ataques en capa de aplicación que agotan recursos del servidor.
La solución: - Usá un CDN con protección DDoS (Cloudflare, Vercel Edge) - Implementá rate limiting en todos los endpoints públicos - Configurá límites de tamaño de body de request - Usá procesamiento basado en colas para operaciones costosas
8. Robo de sesiones
El robo de sesiones ocurre cuando un atacante roba el token de sesión de un usuario y lo suplanta. Los métodos incluyen ataques XSS, sniffing de red y fijación de sesión.
La solución: - Usá tokens de acceso de corta duración (15 minutos) con tokens de refresh seguros - Almacená tokens en cookies httpOnly, Secure, SameSite=Strict - Regenerá tokens de sesión después de login y cambios de privilegios - Implementá invalidación de sesión en logout
9. Subida de archivos insegura
Las vulnerabilidades de subida de archivos permiten a atacantes subir archivos maliciosos que pueden ejecutarse en tu servidor.
La solución: - Validá tipo de archivo tanto del lado del cliente como del servidor (tipo MIME + extensión + magic bytes) - Renombrá archivos subidos para prevenir path traversal - Almacená uploads fuera del root web - Configurá límites de tamaño de archivo - Escaneá archivos subidos en busca de malware - Usá un servicio de almacenamiento dedicado (S3, Cloudflare R2)
10. Ataques a la cadena de suministro
Los ataques a la cadena de suministro apuntan a tus herramientas de desarrollo, dependencias o pipeline de despliegue en vez de tu aplicación directamente.
La solución: - Usá lockfiles y verificá su integridad - Fijá versiones de dependencias (no uses `*` o `latest`) - Revisá actualizaciones de dependencias antes de mergear - Monitoreá por typosquatting (paquetes con nombres similares a populares)
Checklist de seguridad para proyectos nuevos
Antes de lanzar cualquier aplicación web, verificá:
- [ ] Todas las consultas de base de datos usan queries parametrizados u ORM
- [ ] Los headers CSP están configurados y forzados
- [ ] Los tokens CSRF protegen todas las operaciones que cambian estado
- [ ] MFA está disponible para cuentas de admin
- [ ] Rate limiting está configurado en endpoints de auth
- [ ] Las dependencias están auditadas y actualizadas
- [ ] No hay secretos en código fuente ni historial de Git
- [ ] Los uploads de archivos están validados y almacenados seguramente
- [ ] Los mensajes de error no filtran información sensible
- [ ] El logging captura eventos de seguridad sin exponer secretos
Conclusión
La seguridad no es un feature que agregás al final de un proyecto. Es una práctica que implementás desde la primera línea de código. Las amenazas de esta guía no son teóricas. Son explotadas activamente todos los días contra negocios de todos los tamaños.
La estrategia de seguridad más efectiva es defensa en profundidad: múltiples capas de protección para que si una falla, las otras atrapen el ataque.
¿Necesitás una auditoría de seguridad? Contáctanos en RHYNODE.
Escrito por
Juan Sebastián Ortiz
CTO de RHYNODE
CTO de RHYNODE. Arquitecto técnico de cada línea de código: sistemas limpios, integraciones con IA y automatizaciones que operan solas.
LinkedIn