Защита сведений о соединении (ADO.NET)

Защита доступа к источникам данным — одна из важнейших целей защиты приложения. Строка соединения представляет собой потенциальную уязвимость, если она не защищена. Сохранение сведений о соединении в виде простого текста или сохранение их в памяти представляет угрозу безопасности всей системы. Строки соединения, внедренные в исходный код, можно прочитать с помощью Ildasm.exe (дизассемблер MSIL) при просмотре промежуточного языка корпорации Майкрософт (MSIL) в скомпилированной сборке.

Уязвимые места системы безопасности, связанные со строками соединения, могут возникать в зависимости от используемого типа проверки подлинности, способа сохранения строк соединения в памяти или на диске, и методов, используемых для их конструирования

Использование проверки подлинности Windows

Чтобы ограничить доступ к источнику данных, необходимо защитить сведения о безопасном соединении, например, идентификатор пользователя, пароль и имя источника данных. Чтобы не показывать сведения о пользователе, рекомендуется использовать проверку подлинности Windows (которую иногда называют встроенной безопасностью) всегда, когда это возможно. Проверка подлинности Windows указывается в строке соединения с помощью ключевых слов Integrated Security или Trusted_Connection, что исключает необходимость указывать идентификатор пользователя и пароль. Когда используется проверка подлинности Windows, пользователей проверяет операционная система Windows, а доступ к ресурсам сервера и базы данных определяется предоставлением разрешений пользователям и группам Windows.

В ситуациях, когда невозможно использовать проверку подлинности Windows, необходимо проявлять дополнительную осторожность, так как учетные данные пользователя представлены в строке соединения. В приложении ASP.NET можно настроить учетную запись Windows как фиксированное удостоверение, которое используется для подключения к базам данных и другим сетевым ресурсам. Олицетворение включается в элементе-идентификаторе в файле web.config, при этом указываются имя пользователя и пароль.

<identity impersonate="true" 
        userName="MyDomain\UserAccount" 
        password="*****" />

Фиксированная учетная запись идентификации должна быть учетной записью с ограниченными правами, которой предоставлены только необходимые разрешения в базе данных. Кроме того, нужно зашифровать файл конфигурации, чтобы имя пользователя и пароль не были представлены в виде открытого текста.

Не храните строки соединения для OleDbConnection в UDL-файле. Универсальные связи данных хранятся в виде открытого текста и не могут быть зашифрованы. UDL-файл — внешний файловый ресурс для приложения, его нельзя защитить или зашифровать с помощью платформы .NET Framework.

Защититесь от атак путем внедрения кода SQL с помощью построителей строк подключения

Атака путем внедрения кода в строку соединения может произойти, когда для построения строк соединения на основе ввода пользователя используется динамическое объединение строк. Если входные данные пользователя не проверяются и опасный текст или символы не экранированы, то злоумышленник может получить доступ к конфиденциальным данным или другим ресурсам на сервере. Чтобы устранить эту проблему, в ADO.NET 2.0 добавлены новые классы построителя строк подключения, позволяющие проверить синтаксис строки подключения и убедиться, что в нее не внесены дополнительные параметры. Дополнительные сведения см. в разделе Построители строк соединения (ADO.NET).

Используйте значение False параметра Persist Security Info

По умолчанию параметр Persist Security Info имеет значение false. Рекомендуется использовать это значение по умолчанию во всех строках соединения. Присвоение параметру Persist Security Info значения true или yes позволяет получить конфиденциальные сведения, в том числе идентификатор пользователя и пароль, из соединения после того, как оно будет открыто. Если параметру Persist Security Info присвоено значение false или no, то сведения безопасности отбрасываются после того, как они используются для открытия соединения. Таким образом, ненадежный источник не получает доступа к конфиденциальным данным.

Шифрование файлов конфигурации

Строки соединения можно сохранить в файлах конфигурации, что исключает необходимость внедрять их в код приложения. Файлы конфигурации представляют собой стандартные XML-файлы, для которых в платформе .NET Framework определен типовой набор элементов. Строки соединения в файлах конфигурации обычно хранятся в элементе <connectionStrings> в app.config для приложения Windows, либо в файле web.config для приложения ASP.NET. Дополнительные сведения об основах хранения, извлечения и шифрования строк подключения в файлах конфигурации см. в разделе Строки соединения и файлы конфигурации (ADO.NET).

См. также

Другие ресурсы

Защита приложений ADO.NET

Шифрование сведений о конфигурации с помощью функции защищенной конфигурации

Безопасность в машинном коде и коде .NET Framework