Конфиденциальность и безопасность данных
Защита и управление конфиденциальными данными в приложении ADO.NET зависит от базовых продуктов и технологий, используемых для их создания. ADO.NET не предоставляет напрямую службы безопасности или шифрования данных.
Шифрование и хэш-коды
Классы в пространстве имен System.Security.Cryptography платформы .NET Framework можно использовать из приложений ADO.NET для предотвращения несанкционированного считывания или изменения данных сторонними пользователями. Некоторые классы являются оболочками для неуправляемого интерфейса Microsoft CryptoAPI, а другие представляют собой управляемые реализации. В разделе служб шифрования представлен обзор шифрования в платформа .NET Framework, описывается реализация криптографа и способ выполнения конкретных задач шифрования.
В отличие от шифрования, представляющего собой обратимый процесс, хэширование данных необратимо. Хэширование данных может оказаться полезным в тех случаях, когда необходимо предотвратить искажение путем проверки неизменяемости данных. Если заданы идентичные входные строки, то алгоритмы хэширования всегда производят идентичные короткие выходные значения, которые легко сравнить. Обеспечение целостности данных с помощью хэш-кодов описывает способ создания и проверки хэш-значений.
Шифрование файлов конфигурации
Защита доступа к источникам данным - одна из важнейших целей защиты приложения. Строка соединения представляет собой потенциальную уязвимость, если она не защищена. Строки соединения, сохраненные в файлах конфигурации, хранятся в стандартных XML-файлах, для которых в .NET Framework определен набор элементов. Защищенная конфигурация дает возможность шифровать конфиденциальные данные в файле конфигурации. Хотя защищенная конфигурация в первую очередь создана для приложений ASP.NET, она также может использоваться для шифрования разделов файла конфигурации в приложениях Windows. Дополнительные сведения см. в разделе Защита сведений о подключении.
Обеспечение безопасности строковых значений в памяти
Если объект String содержит конфиденциальные данные, например пароль, номер кредитной карты или персональные данные, то существует риск раскрытия этих сведений после их использования, поскольку приложение не может удалить данные из памяти компьютера.
Объект String является неизменяемым; после создания его значение нельзя изменить. Даже если создается впечатление, что произошло изменение строкового значения, в действительности в памяти создается новый экземпляр объекта String, в котором данные сохраняются в виде обычного текста. Кроме того, невозможно спрогнозировать время удаления строковых экземпляров из памяти. Для возврата в систему памяти, освободившейся после удаления строк, применяются средства сборки мусора .NET, поэтому данный процесс является недетерминированным. Если данные по-настоящему конфиденциальны, то следует избегать использования классов String и StringBuilder.
Класс SecureString предоставляет методы шифрования текста в памяти с помощью API-интерфейса защиты данных (DPAPI). Когда строка больше не нужна, она удаляется из памяти. Метода ToString
для быстрого считывания содержимого SecureString не существует. Можно инициализировать новый экземпляр SecureString
, не задавая значений, или передать ему указатель на массив объектов Char. Для работы со строкой можно использовать различные методы этого класса.