Prácticas de Codificación Segura
Marco de Seguridad de Credenciales
graph TD
A[Prácticas de Codificación Segura] --> B[Validación de Entradas]
A --> C[Configuración Segura]
A --> D[Revisión de Código]
A --> E[Análisis Estático]
A --> F[Gestión de Dependencias]
1. Validación y Sanitización de Entradas
Prevención de la Exposición de Credenciales
## Ejemplo Inseguro
def authenticate(username, password):
## Peligroso: Concatenación directa de cadenas
query = f"SELECT * FROM users WHERE username='{username}' AND password='{password}'"
## Ejemplo Seguro
def secure_authenticate(username, password):
## Usar consultas parametrizadas
cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s",
(username, hash_password(password)))
2. Gestión de Configuración Segura
Configuración Basada en Entorno
## Ubuntu 22.04 - Ejemplo de Configuración Segura
## Usar archivos .env con permisos restringidos
touch .env
chmod 600 .env
## Contenido del archivo .env
DB_USERNAME=usuario_seguro
DB_PASSWORD=contraseña_compleja_aquí
API_KEY=clave_cifrada
3. Mejores Prácticas para el Manejo de Credenciales
| Práctica |
Descripción |
Recomendación |
| Sin Codificación |
Evitar incrustar credenciales |
Usar variables de entorno |
| Cifrado |
Proteger datos confidenciales |
Usar métodos de cifrado fuertes |
| Mínima Exposición |
Limitar la visibilidad de credenciales |
Usar tokens de corta duración |
4. Escaneo de Seguridad Automatizado
Herramientas de Análisis de Código Estático
## Instalar y ejecutar herramientas de escaneo de seguridad
sudo apt-get update
sudo apt-get install -y python3-pip
## Instalar herramientas de escaneo de seguridad
pip3 install bandit safety
## Ejecutar el escaneo de seguridad en el proyecto
bandit -r /path/to/your/project
safety check
5. Seguridad de Dependencias
Gestión de Riesgos de Terceros
## Comprobar y actualizar dependencias
pip3 install pip-audit
## Auditar dependencias de Python
pip-audit
## Actualizar paquetes vulnerables
pip3 list --outdated
pip3 install --upgrade package_name
6. Prácticas de Registro Seguro
## Ejemplo de Registro Seguro
import logging
import re
def sanitize_log_message(message):
## Eliminar información confidencial
return re.sub(r'(password|secret|token)=\S+', r'\1=***', message)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def log_authentication_attempt(username):
## Evitar registrar detalles confidenciales
logger.info(f"Intento de autenticación para el usuario: {username}")
7. Lista de Verificación de Revisión de Código
graph LR
A[Revisión de Código] --> B{Comprobaciones de Credenciales}
B --> |Aprobado| C[Aprobar]
B --> |Fallido| D[Rechazar]
Puntos Clave de Revisión
- Sin credenciales codificadas
- Validación de entrada adecuada
- Manejo seguro de errores
- Principios de privilegio mínimo
Recomendaciones Prácticas
En LabEx, destacamos:
- Educación continua en seguridad.
- Auditorías de seguridad regulares.
- Detección automatizada de vulnerabilidades.
- Implementación de estrategias de seguridad multicapa.