7 - Seguridad y buenas prácticas

Objetivo del tema

En esta unidad aprenderás a reforzar la seguridad al administrar dependencias con pip dentro de proyectos desarrollados en Python, priorizando la integridad de paquetes, la evaluación de riesgos y la resolución ordenada de conflictos.

7.1 Comprobar la integridad de paquetes

Antes de instalar una distribución comprobá que provenga de una fuente confiable y verificá las sumas de comprobación publicadas en PyPI. Descargá el paquete y validá su hash con herramientas del sistema.

pip download --no-deps requests==2.31.0
certutil -hashfile requests-2.31.0-py3-none-any.whl SHA256  # Windows
shasum -a 256 requests-2.31.0-py3-none-any.whl             # macOS o Linux

Compará el resultado con el hash oficial. Si no coincide, descartá el archivo y revisá si usaste la URL correcta o si el mirror presenta problemas de sincronización.

7.2 Evitar dependencias innecesarias

Cada paquete adicional incrementa la superficie de ataque y el peso del despliegue. Auditá periódicamente tus dependencias para eliminar bibliotecas sin uso o reemplazarlas por alternativas incluidas en la biblioteca estándar.

  • Revisá los servicios importados en tu código y cruza la lista con el archivo requirements.txt.
  • Utilizá herramientas como pipdeptree para identificar dependencias transitivas que podrían quedar obsoletas.
  • Documentá los motivos por los cuales cada dependencia permanece, así podrás justificarla ante auditorías técnicas.

7.3 Uso de hashes en requirements.txt para mayor seguridad

La opción --require-hashes obliga a que cada entrada en el archivo de requisitos incluya el hash del paquete, evitando que pip instale artefactos manipulados.

# requirements.txt
requests==2.31.0 --hash=sha256:5de070b5e056a75ad095c5bbf0b4180f12ce8a1f8409be2e3ea364ab539cc96f
urllib3==2.2.3 --hash=sha256:6d0f45ed70653cebfb0dce274235a491091696e2a8c62ff50f827bddb5ec9a7a
pip install --require-hashes -r requirements.txt

Generá los hashes con pip hash archivo.whl o utilizando herramientas como pip-compile --generate-hashes de pip-tools para automatizar la tarea.

7.4 Auditorías y herramientas externas para verificar paquetes

Las auditorías detectan vulnerabilidades conocidas en versiones específicas. Ejecutá utilidades especializadas como pip-audit para contrastar tus dependencias frente a bases de datos de CVE.

Un CVE (Common Vulnerabilities and Exposures) es un identificador único para una vulnerabilidad de seguridad informática conocida públicamente. Estos registros ayudan a los profesionales de la seguridad y a los desarrolladores a coordinar sus esfuerzos para solucionar y proteger los sistemas contra estas amenazas.

pip install --upgrade pip-audit
pip-audit --requirement requirements.txt

Integrá estos reportes en tu canal de integración continua para recibir alertas tempranas. Complementá el proceso con escaneos de código estáticos y revisiones manuales de cambios provenientes de repositorios externos.

7.5 Compatibilidad de versiones y conflictos comunes

Los conflictos de versiones surgen cuando dos dependencias exigen requisitos incompatibles. Prevé el problema planificando actualizaciones y empleando herramientas de inspección.

pip check
pipdeptree --warn fail
  • Al detectar una incompatibilidad, evaluá si existe una versión reciente que satisfaga a todos los paquetes involucrados.
  • Mantené entornos de prueba con copias del proyecto para ensayar las actualizaciones antes de impactar en producción.
  • Documentá cada cambio en el archivo de requisitos y comunicá las versiones compatibles al equipo para evitar sorpresas.

Resumen didáctico

Aplicar verificación de integridad, limitar dependencias, usar hashes obligatorios, auditar con herramientas externas y anticipar conflictos de versiones fortalece el ecosistema de tus proyectos. Estas prácticas convierten a pip en un aliado seguro sin sacrificar la velocidad de entrega.