SANITIZACIÓN DE DATOS
La sanitización de datos es el proceso de validar, filtrar y limpiar toda la información que entra en tu sistema para garantizar que sea segura, consistente y de confianza antes de almacenarla o procesarla. La sanitización de datos no solo protege una aplicación sino que también protege a los usuarios y al negocio.¿Por qué es tan importante?
- Previene errores en los datos
- Evita ataques de inyección como XSS o SQL Injection
- Mejora la calidad de la información
- Aumenta la confianza en los sistemas
- Cumple con buenas prácticas y normativas de seguridad
Técnicas comunes
- Validación de tipos y formatos
- Eliminación de caracteres peligrosos
- Escape de caracteres especiales
- Límites de longitud
- Normalización de datos
- Uso de consultas preparadas
Buenas prácticas
- Nunca confíes en los datos del usuario
- Valida tanto en cliente como en servidor
- Usa librerías y frameworks actualizados
- Aplica el principio de mínimo privilegio
- Registra y monitoriza entradas sospechosas
Ejemplos
Sanitización contra XSS
Ejemplo en javascript:const limpio = entrada
.replace(/&/g, "&")
.replace(//g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
Sanitización contra SQL Injection
//ENTRADA MALICIOSA
' OR '1'='1
//USANDO CONSULTAS PREPARADAS (la mejor forma)
$stmt = $pdo->prepare("SELECT * FROM usuarios WHERE email = ?");
$stmt->execute([$email_sanitizado]);
//No hacer nunca
"SELECT * FROM usuarios WHERE id = " . $id; // PELIGROSO
Sanitización de Email
function sanitizar_email($email) {
// Limpiar espacios y convertir a minúsculas
$email = trim(strtolower($email));
// Patrón básico de validación de email
if (preg_match('/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $email)) {
return $email;
}
return null; // email inválido
}
Sanitización de Nombres de Archivos (para subir archivos)
//Entrada: ../../../etc/passwd.jpg
//Salida: etc_passwd.jpg
function sanitizar_nombre_archivo($nombre) {
// Mantener solo letras, números, guiones, puntos y espacios
$nombre = preg_replace('/[^\w\s.-]/u', '', $nombre);
// Reemplazar uno o más espacios por guion bajo
$nombre = preg_replace('/[\s]+/', '_', $nombre);
// Limitar la longitud máxima a 100 caracteres
return substr($nombre, 0, 100);
}
Sanitización de URL / Parámetros
//Javascript
function sanitizarUrlParametro(param) {
return encodeURIComponent(param.trim());
}
// Uso
const busqueda = sanitizarUrlParametro("datos maliciosos & hack=1");
Recomendación
La mejor práctica es combinar varias capas:- Validación en el frontend
- Sanitización + Validación estricta en el backend
- Uso de librerías especializadas:
-
PHP: htmlspecialchars(), filter_var()
Node.js: DOMPurify, validator.js
Python: bleach, html.escape()