Защита сведений о подключении
Область применения: платформа .NET Framework .NET Standard
Защита доступа к источникам данным - одна из важнейших целей защиты приложения. Строка соединения представляет собой потенциальную уязвимость, если она не защищена. Сохранение сведений о соединении в виде простого текста или сохранение их в памяти представляет угрозу безопасности всей системы. Строки подключений, внедренные в исходный код, можно прочитать с помощью программы Ildasm.exe (дизассемблер IL) при просмотре промежуточного языка корпорации Майкрософт (MSIL) в скомпилированной сборке.
Уязвимые места системы безопасности, связанные со строками соединения, могут возникать в зависимости от используемого типа проверки подлинности, способа сохранения строк соединения в памяти или на диске, и методов, используемых для их конструирования
Использование проверки подлинности Windows.
Чтобы ограничить доступ к источнику данных, необходимо защитить сведения о безопасном соединении, например, идентификатор пользователя, пароль и имя источника данных. Чтобы не показывать сведения о пользователе, рекомендуется использовать аутентификацию Windows (которую иногда называют встроенной безопасностью) всегда, когда это возможно. Проверка подлинности Windows указывается в строке соединения с помощью ключевых слов Integrated Security
или Trusted_Connection
, что исключает необходимость указывать идентификатор пользователя и пароль. Когда используется проверка подлинности Windows, пользователей проверяет операционная система Windows, а доступ к ресурсам сервера и базы данных определяется предоставлением разрешений пользователям и группам Windows.
В ситуациях, когда невозможно использовать проверку подлинности Windows, необходимо проявлять дополнительную осторожность, так как учетные данные пользователя представлены в строке соединения. В приложении ASP.NET можно настроить учетную запись Windows как фиксированное удостоверение, которое используется для подключения к базам данных и другим сетевым ресурсам. Олицетворение включается в элементе-идентификаторе в файле web.config, при этом указываются имя пользователя и пароль.
<identity impersonate="true"
userName="MyDomain\UserAccount"
password="*****" />
Фиксированная учетная запись идентификации должна быть учетной записью с ограниченными правами, которой предоставлены только необходимые разрешения в базе данных. Кроме того, нужно зашифровать файл конфигурации, чтобы имя пользователя и пароль не были представлены в виде открытого текста.
Предотвращение атак путем внедрения кода с помощью построителей строк подключения
Атака путем внедрения кода в строку соединения может произойти, когда для построения строк соединения на основе ввода пользователя используется динамическое объединение строк. Если входные данные пользователя не проверяются и опасный текст или символы не экранированы, то злоумышленник может получить доступ к конфиденциальным данным или другим ресурсам на сервере. Чтобы устранить эту проблему, в поставщик данных Microsoft SqlClient для SQL Server добавлен новый класс построителя строк подключений, позволяющий проверить синтаксис строки подключения и убедиться, что в нее не введены дополнительные параметры. Дополнительные сведения см. в статье Connection String Builders (Построители строк подключения).
Использование параметра Persist Security Info со значением false
По умолчанию параметр Persist Security Info
имеет значение false. Рекомендуется использовать это значение по умолчанию во всех строках соединения. Присвоение параметру Persist Security Info
значения true
или yes
позволяет получить конфиденциальные сведения, в том числе идентификатор пользователя и пароль, из соединения после того, как оно будет открыто. Если параметру Persist Security Info
присвоено значение false
или no
, то сведения безопасности отбрасываются после того, как они используются для открытия соединения. Таким образом, ненадежный источник не получает доступа к конфиденциальным данным.
Шифрование файлов конфигурации
Область применения: платформа .NET Framework .NET Core .NET Standard
Строки соединения можно сохранить в файлах конфигурации, что исключает необходимость внедрять их в код приложения. Файлы конфигурации представляют собой стандартные XML-файлы, для которых в платформе .NET Framework определен типовой набор элементов. Строки соединения в файлах конфигурации обычно хранятся в элементе <connectionStrings> в app.config для приложения Windows или в файле web.config для приложения ASP.NET. Дополнительные сведения об основах хранения, извлечения и шифрования строк подключений в файлах конфигурации см. в статье Строки подключений и файлы конфигурации.