Vulnerabilidades Web y cómo prevenirlas

Aquí describimos las vulnerabilidades más comunes que afectan a las aplicaciones web y, para cada una, damos medidas prácticas y claras para prevenirlas. El tono es directo y pensado para exposición o material de clase.

La inyección SQL ocurre cuando un atacante mete comandos SQL maliciosos en campos de entrada (por ejemplo, login o búsqueda) y la aplicación los ejecuta sin validarlos. Con esto puede ver, cambiar o borrar datos de la base.

Cómo prevenir
  • Usa consultas parametrizadas o declaraciones preparadas (no concatenes strings con datos del usuario).
  • Valida y sanea todas las entradas: filtra caracteres peligrosos y comprueba formatos (emails, números, etc.).
  • Aplica el principio de menor privilegio en la BD: la cuenta que usa la app solo debería tener los permisos estrictamente necesarios.

XSS es cuando se inyecta código (normalmente JavaScript) en páginas que otros usuarios ven. El atacante puede robar cookies, secuestrar sesiones o redirigir al usuario.

Cómo prevenir
  • Escapa correctamente todos los caracteres especiales al mostrar datos en HTML (<, >, &, etc.).
  • Usa políticas de seguridad de contenido (CSP) para limitar qué scripts y orígenes pueden ejecutarse.
  • Valida y limpia las entradas del usuario; evita interpretar texto del usuario como código.

CSRF hace que, sin darse cuenta, un usuario autenticado envíe peticiones que cambian datos (por ejemplo, cambiar contraseña, hacer transferencias) aprovechando que su navegador está logueado.

Cómo prevenir
  • Incluye tokens CSRF únicos en formularios y valida el token en el servidor.
  • Realiza las acciones críticas por POST y no por GET.
  • Para operaciones sensibles, añade una confirmación adicional o doble autenticación.

Esto pasa cuando un programa escribe más datos de los que cabe en un buffer y termina sobreescribiendo memoria. En web es menos común, pero puede aparecer en componentes nativos o servicios escritos en C/C++.

Cómo prevenir
  • Controla los tamaños de entrada y valida límites antes de escribir en memoria.
  • Prefiere lenguajes de más alto nivel que gestionen memoria (ej. Java, Python) cuando sea posible.
  • Aplica mitigaciones como ASLR y compiladores con protecciones (stack canaries, DEP).

Si las contraseñas no están bien protegidas, las sesiones no expiran o los tokens son predecibles, los atacantes pueden secuestrar cuentas.

Cómo prevenir
  • Exige contraseñas fuertes y considera MFA (autenticación multifactor).
  • Almacena contraseñas con hashing seguro (bcrypt, Argon2, PBKDF2).
  • Invalida correctamente las sesiones al cerrar sesión y usa cookies con las banderas Secure y HttpOnly.

Muchas brechas ocurren porque no se aplican actualizaciones a tiempo: CMS, frameworks y librerías pueden tener fallas conocidas.

Cómo prevenir
  • Mantén el software, dependencias y plugins actualizados.
  • Configura alertas de seguridad y aplica parches tan pronto como sea viable.
  • Elimina componentes que no uses o que sean redundantes.

Configuraciones incorrectas pueden dejar accesibles archivos que no deberían ser públicos (backups, config, uploads).

Cómo prevenir
  • Revisa y corrige permisos en el servidor: evita que archivos sensibles sean públicos.
  • Usa .htaccess o reglas del servidor para restringir directorios en Apache/Nginx.
  • Valida y escanea archivos subidos por usuarios antes de almacenarlos o servirlos.

Ajustes por defecto o herramientas de administración accesibles pueden ser explotadas si no se endurece el servidor.

Cómo prevenir
  • Desactiva el listado de directorios y borra archivos de prueba o herramientas innecesarias.
  • Usa HTTPS y fuerza su uso mediante HSTS.
  • Limita el acceso a paneles de administración por IP o mediante VPN cuando sea posible.

Si usas HTTP, los datos viajan sin cifrar y pueden ser interceptados o modificados por terceros (man-in-the-middle).

Cómo prevenir
  • Implementa HTTPS en todo el sitio y mantén certificados TLS/SSL válidos.
  • Asegúrate de que formularios de login y transacciones siempre usen HTTPS.
  • Activa HSTS para obligar el uso de HTTPS en navegadores compatibles.

Fuerza bruta consiste en probar muchas combinaciones de contraseñas hasta adivinar la correcta. Sigue siendo efectiva si no limitas intentos.

Cómo prevenir
  • Implementa bloqueo temporal o ralentización tras varios intentos fallidos.
  • Usa captcha en formularios de acceso y considera MFA.
  • Monitorea intentos sospechosos y notifica bloqueos al usuario.
⬅️ Volver al inicio