Protección de Datos Personales - GDPR con .NET

Protección de Datos Personales - GDPR con .NET


Si eres desarrollador backend, es muy probable que te hayas topado con la necesidad o el requerimiento de no imprimir datos personales en el sistema de log o simplemente no hacer log de datos personales. Este es un requerimiento no funcional común para los desarrolladores y equipos que trabajan en corporaciones bancarias y financieras, así como en otro tipo de instituciones que se regulen bajo normas de protección de datos personales, como el GDPR. Datos como cédula, correo o teléfono se consideran datos de identificación de personas. Otros datos como nombre de usuario, contraseña y biométricos se consideran de riesgo por comprometer la identidad digital, y otros datos como los de tarjetas, cuentas o datos de salud se consideran datos críticos, ya que un atacante los puede aprovechar para realizar operaciones fraudulentas.

Es por ello que este tipo de requerimientos no funcionales cobran mucho sentido, y los equipos ponen mucho enfoque para poder mitigarlos. Las acciones principalmente son preventivas; acciones como las siguientes forman parte de un conjunto de prácticas a tener en cuenta:

  • Ocultamiento y enmascaramiento de datos personales.
  • Cifrado de datos personales.
  • Análisis estáticos de código mediante CI/CD para bloquear despliegues.
  • Roles especializados en seguridad, como analistas, y procesos que están orientados a la detección temprana.

En este artículo buscaré cubrir los dos primeros puntos relacionados con acciones preventivas desde el código. En este caso, para el ecosistema .NET, desde .NET 8 se cuenta con un conjunto de capacidades que permiten la implementación de protección de datos personales.

En este ejemplo se tiene un proyecto de Web API con Minimal API y un endpoint que sirve para crear un cliente. La clase cliente y el endpoint en mención tienen la siguiente estructura:

Clase cliente sin GDPR
Endpoint para crear un cliente

Para fines prácticos y de ejemplo, el endpoint imprime el objeto cliente que recibe. En el log de la consola podemos ver algo como lo siguiente:

Log sin protección de datos personales

Como se puede ver, se muestran valores sensibles y personales. Ahora vamos a mejorar la implementación para poder cumplir con GDPR. Para ello, haremos uso de los paquetes “Microsoft.Extensions.Telemetry” y “Microsoft.Extensions.Compliance.Redaction”. Con estos dos paquetes se puede configurar algo parecido a lo siguiente:

Configuración de protección GDPR

Este fragmento de código se puede explicar de la siguiente manera:

  • Se habilita la redacción de logging; esto permite aplicar máscaras, ocultamientos, entre otros.
  • .NET 8 introduce el concepto o clase “Redactor”. Para este ejemplo se configura un “ErasingRedactor” para proteger el correo, cuya acción sería no imprimir el valor o “borrarlo”.
  • Se configura un segundo redactor “HmacRedactor” para cifrar el nombre del cliente, que cifrará el valor según la clave especificada.

El archivo y clase estática “GdprTaxonomy” contiene las definiciones y atributos de propiedad que se aplicarán sobre los campos de la clase Cliente, con lo cual queda de la siguiente forma:

Clase cliente con GDPR

Aplicando esta configuración, el log se apreciará de la siguiente manera:

Log con GDPR

Dejo enlace del repositorio de ejemplo:

Repositorio protección GDPR con dotnet :)

Conclusión

Proteger los datos personales y sensibles dentro de una aplicación es una tarea importante desde la perspectiva de seguridad. Puedes utilizar un enfoque preventivo mediante código y aplicar técnicas de ocultamiento y enmascaramiento de datos, complementando siempre con un proceso que pone énfasis en la seguridad.


Sígueme en Linkedin para estar al tanto de mis publicaciones y novedades

Referencias