Técnicas de Mitigación
Estrategias de Validación Integral de Entradas
1. Técnicas de Sanitización de Entradas
graph TD
A[Entrada del Usuario] --> B{Proceso de Validación}
B --> |Sanitizar| C[Entrada Limpia]
B --> |Rechazar| D[Bloquear Entrada Maliciosa]
Ejemplo de Sanitización en Python
import re
def sanitize_input(user_input):
## Eliminar caracteres especiales
sanitized = re.sub(r'[<>&;()]', '', user_input)
## Limitar la longitud de la entrada
return sanitized[:50]
## Uso
safe_input = sanitize_input("user_input_with_special_chars!")
2. Métodos de Validación de Entradas
| Tipo de Validación |
Descripción |
Ejemplo |
| Validación de Longitud |
Restricción de la longitud de la entrada |
Máximo 50 caracteres |
| Validación de Tipo |
Asegurar el tipo de dato correcto |
Solo enteros |
| Validación de Patrón |
Coincidencia con patrones regex específicos |
Formato de correo electrónico |
Técnicas de Protección Avanzadas
3. Consultas Parametrizadas
import sqlite3
def secure_database_query(username):
conn = sqlite3.connect('users.db')
cursor = conn.cursor()
## La consulta parametrizada previene la inyección SQL
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
return cursor.fetchall()
4. Codificación de Entradas
## Ejemplo de Codificación URL
python3 -c "import urllib.parse; print(urllib.parse.quote('<script>alert(1)</script>'))"
Marcos de Trabajo y Bibliotecas de Seguridad
5. Herramientas de Protección Recomendadas
graph LR
A[Bibliotecas de Seguridad] --> B[OWASP ESAPI]
A --> C[input-validation npm]
A --> D[Python Bleach]
6. Protección a Nivel de Sistema
## Configuración del Firewall UFW
sudo ufw enable
sudo ufw deny from 192.168.1.100
sudo ufw logging on
Lista de Verificación de Mitigación Práctica
- Implementar validación de lista blanca.
- Usar sentencias preparadas.
- Sanitizar y escapar las entradas.
- Implementar comprobación estricta de tipos.
- Usar bibliotecas de seguridad.
Ejemplo de Validación a Nivel de Código
def robust_input_validation(user_input):
## Múltiples capas de validación
if not user_input:
raise ValueError("Entrada vacía")
## Comprobación de longitud
if len(user_input) > 100:
raise ValueError("Entrada demasiado larga")
## Validación de patrón con expresiones regulares
import re
if not re.match(r'^[a-zA-Z0-9_]+$', user_input):
raise ValueError("Caracteres inválidos")
return user_input
## Uso
try:
validated_input = robust_input_validation("user123")
except ValueError as e:
print(f"Error de Validación: {e}")
Principios Clave de Mitigación
- Nunca confíe en la entrada del usuario.
- Validar en múltiples capas.
- Usar bibliotecas de seguridad integradas.
- Implementar acceso con privilegio mínimo.
En LabEx, destacamos un enfoque multicapa para la validación de entradas y la seguridad.