Estrategias de sanitización
Principios fundamentales de sanitización
La sanitización de nombres de archivo consiste en transformar entradas potencialmente peligrosas en formatos seguros y predecibles que prevengan vulnerabilidades de seguridad.
Técnicas de sanitización
graph TD
A[Filename Sanitization] --> B[Whitelist Approach]
A --> C[Blacklist Approach]
A --> D[Encoding Transformation]
A --> E[Character Filtering]
Métodos de sanitización completos
1. Filtrado por lista blanca de caracteres
def sanitize_filename(filename):
## Allow only alphanumeric characters, periods, and underscores
allowed_chars = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._-')
return ''.join(char for char in filename if char in allowed_chars)
2. Prevención de ataques de recorrido de rutas (Path Traversal)
## Remove potential path traversal characters
sanitized_filename=$(echo "$filename" | sed -e 's/\.\.\///g' -e 's/[\/\\\:\*\?\"\<\>\|]//g')
Comparación de estrategias de sanitización
Estrategia |
Ventajas |
Desventajas |
Lista blanca (Whitelist) |
Control estricto |
Puede limitar nombres de archivo válidos |
Lista negra (Blacklist) |
Más flexible |
Menos segura |
Codificación (Encoding) |
Preserva caracteres |
Implementación compleja |
Técnicas avanzadas de sanitización
Manejo de caracteres Unicode y especiales
import unicodedata
import re
def advanced_sanitize(filename):
## Normalize Unicode characters
normalized = unicodedata.normalize('NFKD', filename)
## Remove non-ASCII characters
ascii_filename = normalized.encode('ascii', 'ignore').decode('ascii')
## Replace spaces and remove special characters
sanitized = re.sub(r'[^\w\-_\.]', '', ascii_filename)
return sanitized.lower()
Mejores prácticas para desarrolladores de LabEx
- Siempre valide y sanitice las entradas de nombres de archivo.
- Utilice listas blancas estrictas cuando sea posible.
- Implemente múltiples capas de sanitización.
- Limite la longitud de los nombres de archivo.
- Evite almacenar archivos con nombres proporcionados por el usuario en directorios críticos.
Consideraciones de seguridad
flowchart TD
A[Input Filename] --> B{Sanitization Process}
B --> |Whitelist Filtering| C[Safe Filename]
B --> |Validation| D[Length Check]
B --> |Encoding| E[Unicode Normalization]
C --> F[Secure File Handling]
Al implementar estas estrategias, los desarrolladores pueden reducir significativamente el riesgo de vulnerabilidades de seguridad basadas en nombres de archivo en sus aplicaciones.