"Mi web es pequeña, ¿quién me va a atacar?" Es una de las frases más habituales. Y también una de las más peligrosas, porque los ataques a webs pequeñas no son personales: son automáticos.
Por qué atacan webs pequeñas
No te atacan a ti. Atacan en masa. Bots automatizados escanean millones de webs buscando vulnerabilidades conocidas. Si la tuya tiene una, entras en la lista.
Los usos típicos:
Error 1: Roles mal implementados
El clásico: cualquier usuario autenticado puede acceder a /admin porque "solo lo saben los administradores".
La realidad: las URLs se filtran, se adivinan, se descubren. Si no hay validación de permisos en el servidor, no hay seguridad.
Solución: validar permisos en cada petición, en el servidor, sin excepciones. Que la URL sea "secreta" no es protección.
Error 2: Librerías con vulnerabilidades conocidas
Ese plugin que se instaló hace dos años tiene varios CVEs críticos publicados — vulnerabilidades documentadas públicamente que cualquier atacante puede explotar con herramientas automáticas.
La realidad: herramientas como npm audit o composer audit te dicen exactamente qué tienes vulnerable. Solo hay que ejecutarlas.
Solución: actualizar regularmente. Automatizar la detección con Dependabot o similar.
Error 3: Headers de seguridad inexistentes
Tu web no tiene Content-Security-Policy (CSP), ni X-Frame-Options, ni HSTS. Eso te deja expuesto a inyecciones de código, clickjacking y ataques de downgrade — técnicas que estos headers bloquean sin necesidad de cambiar tu código.
La realidad: configurar estos headers lleva minutos y bloquea categorías enteras de ataques.
Solución: configurar headers de seguridad en tu servidor o CDN. Verificar en securityheaders.com.
Error 4: Formularios sin protección
Sin rate limiting, sin CSRF tokens, sin validación en servidor. Tu formulario de contacto es una puerta abierta para bots.
La realidad: los bots envían miles de peticiones por hora. Sin protección, tu servidor colapsa o tu bandeja se llena de spam.
Solución: CSRF tokens — códigos únicos que verifican que el formulario se envió desde tu web —, rate limiting para limitar peticiones por IP, honeypots (campos invisibles que solo rellenan los bots) y validación en el servidor.
Error 5: Backups inexistentes o no probados
Existen "backups" pero nadie ha probado a restaurar uno. Cuando se necesitan, resulta que están corruptos, incompletos o no cubren lo necesario.
La realidad: un backup que no puedes restaurar no es un backup.
Solución: automatizar backups, probar restauración periódicamente, almacenar fuera del servidor principal.
Conclusión
La seguridad web no requiere ser experto. Requiere disciplina y conocer los básicos. Estos cinco puntos cubren la mayoría de ataques que sufren webs pequeñas.
¿Cuántos de estos errores tiene tu web? Revisarlo lleva menos de una hora y puede ahorrarte un disgusto serio.