Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1155. #ЗаметкиНаПолях Тип .NET для Персональных Данных. Начало Персональные данные (Personally identifiable information - PII) — это любая информация, относящаяся к идентифицированному или идентифицируемому физическому лицу (т.е. позволяющая идентифицировать лицо прямо или косвенно, в частности, через имя, идентификационный номер, email, дату рождения, данные о местоположении и т.п.). Проблема Согласно законодательству многих стран, вы должны обращаться с PII особым образом. Например: 1. Шифровать или анонимизировать везде, где это возможно. Для этого данные PII должны отображаться по-разному в зависимости от варианта использования. Например: - обычный текст в UI; - псевдоним в логах; - зашифрованы в файле экспорта CSV. 2. Подписать соглашение об обработке данных с любыми третьими лицами, которые обрабатывают PII от вашего имени. Здесь нужно быть готовым к многочисленным вопросам от юристов, чтобы выяснить, где и почему используется PII. 3. Возможность для ваших клиентов запросить удаление их личных данных, либо получить копию своих личных данных в формате, который можно легко передать другой компании. Нужно уметь выяснять, какие именно данные нужно удалить и экспортировать, а затем выполнить это. На первый взгляд очевидно использование string для PII:
public class User
{
  public Guid Id { get; set; }
  public string Name { get; set; }
  public string Email { get; set; }
  public string Location { get; set; }
}
Однако не очевидно, как шифровать/анонимизировать эти значения в каждом конкретном случае. Кроме того, идентификация таких полей в исходном коде по запросу юристов компании может быть сложной задачей. Решение Ввести явный тип, например, PiiString. Он должен быть как можно более взаимозаменяемым со string, чтобы упростить рефакторинг существующего кода, использующего string. В приложении он должен вести себя как обычная строка, однако вне приложения, он должен быть закодирован/зашифрован/хеширован. Заметьте, что ниже приведена упрощённая версия класса. Полная тут:
public class PiiString
{
  private readonly string _string;

  public PiiString(string str)
    => _string = str ??
      throw new ArgumentNullException(nameof(str));

  public override string ToString()
    => _string;
}

Окончание следует… Источник: gaevoy.com/2022/03…pes.html