- ¿Por qué es importante la seguridad web?
- Primer regla de seguridad: nunca confíes en el usuario
- ¿Qué es una XSS?
- ¿Cómo prevenir XSS en Flask?
- Casos donde el escape automático no es suficiente
- ¿Qué es CSP?
- ¿Y qué hay de otras amenazas?
En este punto del curso ya sabes cómo hacer funcionar un sitio web básico con Flask. ¡Bien hecho! Pero antes de seguir construyendo nuevas funciones increíbles, es muy importante detenernos un momento y hablar de algo clave: la seguridad. 🔒
¿Por qué es importante la seguridad web?
Muchos sitios, incluso los de grandes empresas, tienen fallos de seguridad. Esto se puede traducir en:
📉 Pérdida o robo de datos de usuarios.
🛑 Daños a la reputación del sitio (y del negocio).
❌ Bloqueo o eliminación del sitio completo.
Por eso, así como no dejas la puerta de tu casa abierta, tampoco quieres que tu sitio esté vulnerable.
Primer regla de seguridad: nunca confíes en el usuario
Lo primero —y más importante— que tienes que entender es esto:
Aunque la mayoría de usuarios no quiera hacer daño, un atacante sí puede enviar datos con malas intenciones. Veamos un ejemplo para entenderlo mejor.
Ejemplo: ruta con nombre de usuario
Imagina que tu aplicación tiene esta ruta:
http://localhost:8000/users/nick
Y tú simplemente tomas ese valor (nick) y lo muestras en un título H1:
<h1>{{ name }}</h1>
Ahora piensa qué pasa si alguien usa un URL como este:
http://localhost:8000/users/%3Cscript%3Ealert('attack!')%3B%3C%2Fscript%3E
Después de descodificar, eso es lo mismo que escribir:
<h1><script>alert('attack!');</script></h1>
En este caso, ¡el navegador ejecuta el código JavaScript! Y ahí es donde empieza el problema.
¿Qué es una XSS?
¿Cómo funciona?
1️⃣ Inyección de código
El atacante logra insertar código JavaScript dentro de una página vulnerable.
2️⃣ Ejecución en el navegador
Cuando un usuario visita la página, el código inyectado se ejecuta como si fuera parte del sitio legítimo.
3️⃣ Robo de información
El atacante puede acceder a cookies 🍪, tokens 🔑 o datos personales 📋 del usuario, comprometiendo su seguridad.
¿Cómo prevenir XSS en Flask?
Flask utiliza un motor de plantillas llamado Jinja2. Y la buena noticia es: Jinja2 ya realiza auto-escape automático. Eso significa que convierte los caracteres peligrosos (como < y >) en versiones seguras que el navegador no interpreta como código HTML. ✅
⏬ Veamos un ejemplo:
import html
text = "A 'quote' is <b>bold</b>"
print(html.escape(text))
# Salida: A 'quote' is <b>bold</b>
Esto evita que los tags HTML se ejecuten accidentalmente.
Ahora, en Jinja2 con Flask:
<h1>{{ name }}</h1>
Por defecto, name se escapa para que no se pueda ejecutar código malicioso.
Casos donde el escape automático no es suficiente
Aunque Jinja2 ayuda mucho, hay situaciones donde tienes que tener más cuidado:
Puede parecer inofensivo, pero si haces esto:
<input value={{ user_input }}>
Y si alguien entra esto como valor:
onfocus=alert('attack!')
El HTML resultante sería ejecutable.
✅ Solución: siempre pon comillas:
<input value="{{ user_input }}">
Este código:
<a href="{{ url }}">Haz clic aquí</a>
Podría convertirse fácilmente en algo como:
<a href="javascript:alert('attack!')">Haz clic aquí</a>
✅ Solución: en este caso, además de escapar, debes usar políticas de seguridad adicionales como CSP.
¿Qué es CSP?
Puedes aprender a usarlo con Flask en la documentación oficial de Flask sobre CSP.
¿Y qué hay de otras amenazas?
Además de XSS, existen otros ataques muy comunes como:
- SQL Injection - Inyección de código en consultas de bases de datos
- CSRF (Cross-Site Request Forgery) - Engaña al usuario para ejecutar acciones no autorizadas.
- Clickjacking - Oculta enlaces maliciosos en elementos visibles de una web
Para poder entender y defenderte de estos, primero tendrás que aprender cómo se conectan las aplicaciones a bases de datos. Pero por ahora, haber entendido XSS ya es un gran paso adelante.
Resumen
- La seguridad es clave, incluso en proyectos pequeños.
- El ataque XSS ocurre cuando se ejecuta JS malicioso dentro de la página.
- Jinja2 proporciona protección automática escapando caracteres peligrosos.
- Tienes que tener cuidado especial en atributos HTML y enlaces para evitar nuevas formas de XSS.
- Las cabeceras CSP fortalecen la seguridad de tu sitio.
- Esta es solo una parte de la seguridad web, más adelante aprenderás sobre SQL Injection y otros ataques.
Recuerda, no necesitas aprender todo de seguridad de una sola vez, pero es fundamental que empieces con buenas prácticas desde ya. Y lo estás haciendo. ¡Sigue así!
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.