Validación de datos de entrada
Recomendaciones
Asegurar que todos los datos de entrada sean validados semántica y sintácticamente previos a ser utilizados.
La validación semántica implica garantizar que los datos de entrada son correctos en términos del contexto en el que se están utilizando, es decir, tengan sentido. Por ejemplo, un monto de una transacción no debe ser negativo.
La validación sintáctica implica garantizar que los datos de entrada estén estructurados educadamente y sean del tipo correcto. Por ejemplo, si un campo de entrada espera un número de tarjeta de crédito, solo se deben aceptar datos de entrada que contengan dieciséis dígitos. Cualquier otra cosa debe rechazarse como entrada no válida.
Si bien es posible realizar verificaciones de tipo de datos manualmente, muchos lenguajes de programación brindan funciones integradas. Por ejemplo, PHP tiene las funciones
ctype_alpha()
,ctype_digit()
yctype_alnum()
para comprobar si una cadena contiene solo letras, solo números o letras y números. Python, por ejemplo, tiene las funcionesisalpha()
,isnumeric()
yisalnum()
para el mismo propósito.
Las validaciones de datos de entrada deben realizarse del lado del servidor. Las validaciones del lado del cliente se pueden omitir.
Rechazar y no limpiar. Las entradas maliciosas pueden crearse para aprovechar esto. Es decir, las tareas de reducción de inconsistencias y errores pueden tener consecuencias negativas. Rechace siempre las entradas no válidas.
No utilizar igualdad abstracta con variables de tipos imprecisos en operaciones sensibles a la seguridad. Un atacante podría eludir los controles enviando valores que cumplan con las comprobaciones de igualdad abstracta, por lo tanto, las aplicaciones deben convertir la entrada al tipo de datos esperado y usar comparaciones de igualdad estrictas.
La validación es la primera línea de defensa. La validación de datos de entrada puede ayudar a filtrar entradas maliciosas. Sin embargo, no se debe utilizar como la única línea de defensa.
Última actualización
¿Te fue útil?