Lección 11 de 16 · Nivel 3: Avanzado
Seguridad web y OWASP Top 10 (nivel conceptual)
- ⏱ 15 min de lectura
- ❓ 4 preguntas de repaso
- ✍️ Ejercicio con solución
En esta lección
- Entender, sin necesidad de programar, cómo funciona una aplicación web y dónde suele fallar.
- Conocer las diez categorías del OWASP Top 10 en su edición 2025 y qué cambió frente a 2021.
- Saber cómo se previenen los riesgos más comunes: control de acceso, inyección y mala configuración.
- Proteger una tienda online o un sitio con gestor de contenidos con una lista práctica.
- Integrar la seguridad en todo el ciclo de desarrollo, no solo al final.
Las aplicaciones web (tiendas online, portales de clientes, sistemas internos) son la cara visible de casi cualquier negocio, y por eso un blanco frecuente. El proyecto OWASP publica el Top 10, una lista de las categorías de riesgo más importantes para las aplicaciones web que se usa en todo el mundo como punto de partida para desarrolladores, auditores y dueños de negocios. Esta lección es conceptual y defensiva: aprenderás qué significa cada categoría y cómo se previene. Probar la seguridad de un sitio ajeno sin autorización por escrito es ilegal; los ejemplos se describen para que revises y protejas tus propias aplicaciones.
- Cómo funciona la web
- El Top 10 de 2025
- Cuatro riesgos a fondo
- Tu tienda online
- Desarrollo seguro
Cómo funciona una aplicación web en 1 minuto
Tu navegador (el cliente) envía una solicitud HTTP a un servidor: "dame la página del pedido 1045". El servidor ejecuta el código de la aplicación, consulta la base de datos y devuelve una respuesta. Para recordar quién eres entre una página y otra, usa una sesión, normalmente guardada en una cookie. Casi todos los problemas de seguridad web aparecen cuando el servidor confía demasiado en lo que le envía el cliente: un número de pedido, un texto en un formulario o un archivo subido. La regla de oro del desarrollo seguro es: todo lo que viene del usuario se valida en el servidor.
El OWASP Top 10 en su edición 2025
OWASP es una fundación sin fines de lucro dedicada a la seguridad del software. Su Top 10 no es una norma obligatoria, sino un documento de concienciación basado en datos de miles de aplicaciones y en encuestas a la comunidad. Esta es la lista vigente:
| Código | Categoría | Qué significa | Cómo se previene |
|---|---|---|---|
| A01:2025 | Control de acceso roto (Broken Access Control) | Un usuario puede ver o hacer cosas que no le corresponden | Verificar permisos en el servidor en cada solicitud y denegar por defecto |
| A02:2025 | Configuración de seguridad incorrecta (Security Misconfiguration) | Contraseñas por defecto, funciones innecesarias activas, errores que muestran detalles internos | Configuración base endurecida, revisada y automatizada |
| A03:2025 | Fallas en la cadena de suministro de software (Software Supply Chain Failures) | Librerías, plugins o herramientas de terceros vulnerables o comprometidos | Inventario de componentes, fuentes confiables y actualizaciones |
| A04:2025 | Fallas criptográficas (Cryptographic Failures) | Datos sensibles sin cifrar o con algoritmos débiles | HTTPS en todo el sitio, cifrado de datos sensibles y contraseñas guardadas con funciones de hash diseñadas para ello |
| A05:2025 | Inyección (Injection) | Datos del usuario que el sistema termina interpretando como comandos | Consultas parametrizadas y validación de entradas |
| A06:2025 | Diseño inseguro (Insecure Design) | Fallas de lógica que vienen desde el diseño, no del código | Modelado de amenazas y casos de abuso al diseñar |
| A07:2025 | Fallas de autenticación (Authentication Failures) | Inicios de sesión débiles, sin límite de intentos o sesiones mal gestionadas | Doble factor, límites de intentos y sesiones que expiran |
| A08:2025 | Fallas de integridad de software o datos (Software or Data Integrity Failures) | Actualizaciones o datos que se aceptan sin verificar su origen | Firmas digitales y verificación de integridad |
| A09:2025 | Fallas en el registro y las alertas de seguridad (Security Logging & Alerting Failures) | No queda rastro de lo que pasó o nadie se entera a tiempo | Registrar eventos clave y generar alertas que alguien revise |
| A10:2025 | Manejo incorrecto de condiciones excepcionales (Mishandling of Exceptional Conditions) | Errores e imprevistos que dejan la aplicación en un estado inseguro | Manejo de errores que "falla de forma segura", sin exponer detalles |
Qué cambió frente a la edición 2021
- Nuevas: A03, que amplía la antigua categoría de componentes vulnerables y desactualizados a todo el ecosistema de software, y A10, sobre el manejo de condiciones excepcionales.
- Fusionada: la falsificación de solicitudes del lado del servidor (SSRF) pasó a formar parte de A01.
- Movimientos: la configuración incorrecta subió del quinto al segundo puesto; las fallas criptográficas bajaron del segundo al cuarto; la inyección, del tercero al quinto; el diseño inseguro, del cuarto al sexto.
- Renombradas: A07 (antes "fallas de identificación y autenticación") y A09 (antes "fallas de registro y monitoreo").
1. ¿Qué categoría ocupa el primer lugar del OWASP Top 10 en la edición 2025?
A01:2025 es el control de acceso roto, que mantiene el primer lugar de 2021 y ahora incluye SSRF. La inyección bajó al quinto lugar y la cadena de suministro es la nueva A03.
Cuatro riesgos a fondo
Control de acceso roto (A01)
Una clienta de una tienda online entra a "Mis pedidos" y la dirección muestra /pedidos/1045. Si el servidor solo comprueba que ella inició sesión, pero no que el pedido 1045 sea suyo, otra persona con sesión iniciada podría ver datos que no le pertenecen. La protección no está en esconder el número, sino en que el servidor verifique en cada solicitud que ese usuario tiene permiso sobre ese recurso. Lo mismo vale para funciones de administrador: ocultar un botón en la pantalla no impide que alguien envíe la solicitud.
Inyección (A05)
La inyección ocurre cuando una aplicación mezcla datos del usuario con instrucciones para la base de datos u otro sistema, y estos terminan interpretando los datos como órdenes. La defensa principal es separar siempre datos e instrucciones con consultas parametrizadas: la instrucción se escribe fija, con marcadores, y los datos se pasan aparte. Así se ve una consulta segura en Python:
import sqlite3
conexion = sqlite3.connect("tienda.db")
correo = input("Correo del cliente: ")
# Correcto: la consulta es fija y el dato viaja aparte (marcador ?)
cursor = conexion.execute(
"SELECT id, nombre FROM clientes WHERE correo = ?",
(correo,)
)
print(cursor.fetchall())
La base de datos trata lo que escribió el usuario siempre como un dato, nunca como parte de la instrucción, sin importar qué contenga. Si estás aprendiendo SQL con Python, revisa la lección de bases de datos con Python y SQLite.
2. ¿Cuál es la defensa principal contra la inyección en consultas a una base de datos?
Con consultas parametrizadas, el dato del usuario nunca forma parte de la instrucción. Ocultar errores ayuda (A02, A10), pero no corrige el problema de fondo, y pedir "por favor" no es un control.
Configuración de seguridad incorrecta (A02)
Subió al segundo lugar porque cada vez más de la seguridad depende de configurar bien: servidores, paneles, almacenamiento en la nube y cabeceras HTTP. Revisa que no queden cuentas con contraseñas por defecto, que los mensajes de error no muestren detalles técnicos internos, que no estén activas funciones de prueba y que el servidor envíe cabeceras de seguridad como estas:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: default-src 'self'
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
La primera obliga al navegador a usar siempre HTTPS con tu sitio; la segunda limita desde dónde se pueden cargar scripts y otros recursos; la tercera impide que el navegador "adivine" el tipo de un archivo; la cuarta controla qué información se envía al seguir enlaces. La política de contenido (CSP) debe ajustarse a cada sitio y probarse antes de aplicarla.
Cadena de suministro de software (A03)
Una aplicación moderna puede depender de cientos de librerías y plugins escritos por terceros. Si uno de ellos tiene una falla o es comprometido, tu aplicación hereda el problema. La defensa: mantener un inventario de componentes (a menudo llamado SBOM, lista de materiales del software), instalar solo desde fuentes oficiales, eliminar lo que no se usa, actualizar con regularidad y vigilar los avisos de seguridad de lo que usas.
Si tienes una tienda online o un sitio con gestor de contenidos
No necesitas programar para aplicar lo esencial. Esta lista cubre gran parte del Top 10 para sitios en plataformas como WordPress con WooCommerce o tiendas alojadas. Si estás montando tu tienda, complementa con la lección de ecommerce del curso de marketing digital:
Caso: revisión de seguridad de una tienda en Medellín
La revisión encontró 20 hallazgos: 1 crítico (un plugin de formularios desactualizado con una falla conocida, A03), 3 altos (dos cuentas de administrador sin doble factor y un panel de pruebas accesible, A07 y A02), 6 medios y 10 bajos. En 30 días, Sofía resolvió todos los críticos y altos, 4 medios y 3 bajos.
Quedan 9 de 20 hallazgos, todos de severidad media o baja, con fecha de corrección asignada.
3. En el caso de Sofía, ¿qué porcentaje de los 20 hallazgos quedó resuelto a los 30 días?
Resolvió 1 + 3 + 4 + 3 = 11 hallazgos. 11 ÷ 20 = 55%. Quedan 9 (45%), pero ninguno crítico ni alto: priorizar por severidad es más importante que el porcentaje total.
Seguridad en todo el ciclo de desarrollo
Corregir una falla de diseño cuando la aplicación ya está en producción cuesta mucho más que evitarla en la pizarra. Por eso la seguridad se integra en cada etapa:
- DiseñoModelado de amenazasPreguntarse "¿qué podría salir mal?" y escribir casos de abuso junto a los casos de uso (A06).
- DesarrolloBuenas prácticas y revisión de códigoConsultas parametrizadas, validación en el servidor, manejo de errores seguro y revisión entre pares.
- PruebasHerramientas automáticasAnálisis estático del código (SAST), análisis de componentes de terceros (SCA) y pruebas dinámicas (DAST) en un entorno de pruebas.
- ProducciónMonitoreo y canal de reporteRegistros y alertas (A09), pruebas de penetración autorizadas y una política para que investigadores reporten fallas de forma responsable.
Errores comunes
Ocultar un botón de administrador y creer que eso protege la función.
Verifica el permiso en el servidor en cada solicitud.
Instalar plugins "por si acaso" y no actualizarlos.
Usa los mínimos, de fuentes confiables, y actualízalos.
Mostrar mensajes de error con detalles técnicos al visitante.
Muestra un mensaje genérico y guarda el detalle en el registro interno.
Dejar la seguridad para "una auditoría al final".
Intégrala desde el diseño y en cada entrega.
4. Un error inesperado en el proceso de pago hace que la aplicación muestre la ruta interna de los archivos del servidor y la versión de la base de datos. ¿Con qué categorías se relaciona más?
La aplicación no maneja de forma segura un imprevisto y, además, está configurada para mostrar detalles internos. La solución es un manejo de errores que falle de forma segura y mensajes genéricos al usuario.
Ejercicio práctico
Relaciona cada situación de un portal de clientes con su categoría del OWASP Top 10:2025 y propón una medida preventiva:
- El panel de administración sigue con el usuario y la contraseña que trae la plataforma al instalarse.
- El portal permite probar contraseñas sin límite de intentos y no ofrece doble factor.
- Un usuario con rol "vendedor" puede descargar el reporte de planillas, reservado a Recursos Humanos, si escribe la dirección directamente.
- Nadie se enteró durante tres semanas de que una cuenta de administrador iniciaba sesión de madrugada desde otro país.
- La aplicación usa una librería de generación de PDF con una vulnerabilidad publicada hace un año.
Ver solución
- A02 Configuración incorrecta: cambiar credenciales por defecto, crear cuentas individuales y revisar la configuración base.
- A07 Fallas de autenticación: limitar intentos, activar doble factor y bloquear contraseñas comunes o filtradas.
- A01 Control de acceso roto: verificar el rol en el servidor para cada reporte y denegar por defecto.
- A09 Fallas en el registro y las alertas: registrar inicios de sesión de administradores y alertar ante horarios o ubicaciones inusuales.
- A03 Fallas en la cadena de suministro: inventario de componentes, actualización de la librería y alertas de nuevas vulnerabilidades en las dependencias.
Resumen
- La mayoría de las fallas web nacen de confiar en lo que envía el usuario: todo se valida en el servidor.
- El OWASP Top 10:2025 lo encabeza el control de acceso roto, seguido de la configuración incorrecta y la nueva categoría de cadena de suministro.
- Las consultas parametrizadas previenen la inyección; las cabeceras de seguridad y una configuración endurecida reducen A02.
- En una tienda online: actualizaciones, cuentas con rol mínimo y doble factor, HTTPS, pasarela de pago, copias, WAF y alertas.
- La seguridad se integra desde el diseño y en todo el ciclo de desarrollo, y solo se prueba con autorización.
En la próxima lección: Gestión de identidades y accesos: mínimo privilegio. Aprenderás a decidir quién accede a qué, a revisar permisos y a gestionar altas, cambios y bajas sin dejar puertas abiertas.
Crea tu cuenta en 30 segundos, marca tus lecciones y descarga el certificado al terminar.