18. Seguridad y Calidad de Software: Bandit + SonarQube 🛡️📈
La Mentalidad de Producción
Escribir código que "funcione" es solo el primer paso de un programador junior. Para convertirte en un desarrollador profesional, tu código debe cumplir con dos pilares obligatorios antes de subirse a servidores reales:
🛡️ 1. Seguridad (Security)
Evitar que hackers o usuarios maliciosos vulneren nuestro software mediante inyección de código, robo de datos o ejecución de comandos maliciosos.
📈 2. Calidad y Mantenibilidad (Quality)
Evitar el "código spaghetti", variables confusas, funciones demasiado complejas y código duplicado que impida a otros programadores modificar el software en el futuro.
Una Analogía Pedagógica 🧠
Imagina que estás construyendo una sucursal física de tu Cafetería Express:
- Bandit es el Perro Guardián 🐕: Solo le importa la seguridad inmediata. Él huele el perímetro buscando agujeros en la cerca, puertas sin llave o explosivos. No le importa si las mesas están desordenadas o si el menú tiene faltas de ortografía; solo le interesa que nadie pueda asaltar la caja.
- SonarQube es el Diseñador y Auditor de Procesos 📋: Él evalúa la experiencia general de la tienda. Revisa si los pasillos son cómodos, si el personal duplica tareas innecesariamente, si la cocina está ordenada y si la receta del café es clara para que cualquier barista nuevo la entienda. Le importa la excelencia, el orden y la eficiencia a largo plazo.
Clase 1: Bandit — Auditoría de Seguridad en Python 🐍🔒
Bandit es una herramienta de *Análisis Estático de Seguridad (SAST)* dedicada exclusivamente a Python. Analiza el código buscando vulnerabilidades comunes (como uso de contraseñas expuestas directamente, uso de funciones de alto riesgo como eval(), o librerías inseguras como pickle).
Para instalar y ejecutar Bandit en tu proyecto, ejecutas en tu terminal:
Caso Práctico: Detectando y Resolviendo con Bandit
Mira este ejemplo de código con tres fallas críticas de seguridad y cómo se resuelven correctamente:
🚨 Código Inseguro (Bandit Alertará)
✔ Código Seguro y Corregido
Clase 2: SonarQube — El Guardián de la Calidad 📊✨
Mientras Bandit busca "cerrar la puerta a los hackers", SonarQube busca que tu código sea limpio y legible (lo que llamamos evitar los Code Smells u "olores de código" y la Complejidad Cognitiva).
Es una métrica que mide qué tan difícil es para un cerebro humano entender el flujo del código. Un código con muchos bucles e instrucciones
if anidadas unas dentro de otras tiene una complejidad alta, lo que facilita que cometamos errores al modificarlo.
Caso Práctico: Refactorización por Calidad
A continuación, comparamos un código difícil de leer y duplicado con su versión limpia y aprobada por SonarQube:
🚨 Código Spaghetti (Complejo y Acoplado)
✔ Código Limpio (Modular y Mantenible)
Ponte a prueba: ¡El Desafío del Auditor! 🕵️♂️
💻 Desafío: Encuentra y Resuelve
Analiza el siguiente fragmento de código. Escribe en un papel qué problemas específicos detectaría Bandit (vulnerabilidades) y cuáles detectaría SonarQube (calidad/mantenimiento/code smells). Luego, refactoriza el código para dejarlo impecable.
👁️ Ver Análisis de Auditoría y Solución
🕵️♂️ Hallazgos de Bandit:
- Secreto Expuesto: La clave
key = "123456"está escrita directamente en el código (vulnerabilidad de severidad alta). - Función Peligrosa: El uso de
eval(u)permite al usuario inyectar y ejecutar cualquier código de Python en la máquina del servidor.
📊 Hallazgos de SonarQube:
- Código Duplicado / Code Smell: La línea
if x > 10: print("Alerta")está repetida exactamente igual en ambos bloquesif/else. - Nombres de variables no descriptivos: Las variables
u,pyxno indican qué tipo de datos almacenan. - Complejidad Cognitiva Innecesaria: Estructura anidada profunda que se puede simplificar fácilmente.
✔ Código Solucionado e Impecable:
Prueba de Conocimientos Final 📝🏆
Demuestra tus habilidades de auditoría completando el quiz oficial de cierre de módulo: