Está en la página 1de 4

Nombre: Alan Bermudez

NRC: 8344
Fecha: 30/12/2022
Mejores Prácticas en la Validación de datos
Filtrado de datos de entrada mediante expresiones regulares.
Ofrecen una forma muy personalizable y flexible a la vez, para confirmar si cualquier
tipo de datos de entrada es valido. Pueden usarse fácilmente en cualquier lugar del código,
aunque la buena práctica es que estas expresiones regulares estén centralizadas y sean
reutilizables, disponiendo las minimas posibles de forma común a todo el proyecto. Hay que
tener especial cuidado en seleccionar expresiones regulares que sean conocidas y contrastadas en
la industria, obteniéndolas desde fuentes fiables como son instituciones gubernamentales de
ciberseguridad y estándares internacionales como el proyecto OWASP.
Validación de datos de entrada nativa de HTML (solo para el lado cliente)
En la capa cliente se puede limitar la introducción de datos a un usuario mediante el
propio HTML de forma nativa. Por ejemplo mediante el atributo «type» se puede especificar que
sea un número entero y mediante los atributos «min» y «max» el rango posible, al igual que con
las fechas. Al igual que se puede filtrar mediante expresiones regulares con el uso del atributo
pattern.
A nivel de modelado de datos como forma de la arquitectura del proyecto
En C# encontramos los siguientes atributos que podemos usar mediante etiquetas,
podemos establecer una tipologia de validación de datos de entrada a nivel del modelado de
datos del proyecto, a sus entidades, DTOs, etc. De esta manera desde la propia definición del
modelo de datos ya estamos a la vez estableciendo sus limitaciones y el control de validación de
datos de entrada.
Validación de datos a nivel de proyecto completo con DataAnnotations de .Net
 Required: marca que eI miembro debe tener un campo obligatorio. Esta decoración
puede ser utilizada junto a «ErrorMessage» para indicar un mensaje personalizado de
error en el caso de que no se cumpla esta validación.
 Range: marca un rango de valores entre los que debe estar comprendido eI valor
pasado al miembro.
 StringLength: indica un tamaño del campo string. Esta anotación puede ir en
conjunción con «MinimunLength» para indicar incluso un tamaño mínimo del campo
string.
 RegularExpression: indica una expresión regular que debe ser utilizada para validar eI
valor del campo.
 DataType: indica un nombre de un tipo adicional que debe asociarse a un campo de
datos.
 CustomValidation: nos permite validar a través de validaciones personalizadas.

Codificar caracteres especiales para salida a HTML


Si datos que hacen uso de conjuntos de caracteres permisivos, donde pueden existir
caracteres especiales, van a presentarse sobre una web, estos caracteres especiales deben
escaparse o codificarse para que no puedan Negar a modificar esta pégina HTML produciendo
un potencial incidente de seguridad.
Caracteres especiales convertidos para usarlos en HTML sin que se conviertan en un
incidente de seguridad:
 < es convertido a &lt;
 > es convertido a &gt;
 & es convertido a &amp;
 » es convertido a &quot;
Codificar caracteres especiales para formar parte de una URL
Muy parecido al caso anterior pero esta vez en lugar de acabar los datos en una páina
HTML pasarán a formar parte de una URL, se debe hacer uso de un método que convertirá estos
caracteres inseguros a su codificación correcta.
Uso de la libreria nativa AntiXss
La biblioteca anti-XSS nativa de .Net se puede agregar como el codificador
predeterminado, cambiando el elemento de configuración «httpRuntime» en el archivo
«Web.config». Tiene métodos para HTML, XML, URL y JavaScript.
Protección ante un ataque de tipo path traversal o directory traversal
Cuando desde el código acudimos al sistema de archivos para leer, modificar o borrar un
archivo, parte de la ruta de este habitualmente nos viene dada por la entrada de datos del usuario.
En este sentido es peligroso no validar la entrada de datos ya que el atacante puede jugar con
caracteres interpretados de forma especial como son los dos puntos seguidos para acudir al
directorio superior, y asi recursivamente hasta salirse del ámbito para el que esta autorizado, y
por ejemplo intentar obtener el contenido de un archivo del server como puede ser
«/etc/passwd».
Ejemplo
El siguiente codigo muestra la validacion de datos de entrada, por medio de expresiones
regulare,s para un campo que solo permite numeros decimales, el mismo esta realizado con
React, TypeScript y MaterialUI.

También podría gustarte