Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В ранних версиях ADO.NET проверка строк подключения с конкатенированными значениями строк не выполнялась, поэтому во время выполнения при наличии неверного ключевого слова возникала ошибка ArgumentException. Каждый из поставщиков данных .NET Framework поддерживал разный синтаксис для ключевых слов строки подключения, что затрудняло создание допустимых строк подключения, если это делалось вручную. Для решения этой проблемы в ADO.NET 2.0 появились новые построители строк подключения для каждого поставщика данных платформы .NET Framework. Каждый поставщик данных включает класс построителя строк соединения со строгой типизацией, наследованный от класса DbConnectionStringBuilder. В следующей таблице перечислены поставщики данных платформы .NET Framework и связанные с ними классы строителя строк подключения.
Атаки путем внедрения кода в строку подключения
Атака путем внедрения данных в строку соединения может произойти при использовании динамического объединения строк для построения строк соединения, основанных на входных данных пользователя. Если строка не проверяется, а вредоносный текст или символы не экранируются, злоумышленник может получить потенциальный доступ к конфиденциальным данным или другим ресурсам сервера. Например, злоумышленник может осуществить атаку, установив точку с запятой и добавив дополнительное значение. Строка подключения анализируется с использованием алгоритма, где побеждает последний, и враждебные входные данные заменяются на допустимые значения.
Классы построителей строк соединения созданы для устранения предположений и защиты от синтаксических ошибок и уязвимостей системы безопасности. Они предоставляют методы и свойства, соответствующие известным парам «ключ-значение», разрешенным каждым поставщиком данных. Каждый класс поддерживает фиксированную коллекцию синонимов и может переводить синоним в соответствующее общеизвестное ключевое имя. Проверки выполняются для допустимых пар "ключ-значение", а недопустимая пара создает исключение. Кроме того, внедренные значения обрабатываются безопасным образом.
В следующем примере показано, как SqlConnectionStringBuilder обрабатывает вставленное дополнительное значение для Initial Catalog параметра.
Dim builder As New System.Data.SqlClient.SqlConnectionStringBuilder
builder("Data Source") = "(local)"
builder("Integrated Security") = True
builder("Initial Catalog") = "AdventureWorks;NewValue=Bad"
Console.WriteLine(builder.ConnectionString)
System.Data.SqlClient.SqlConnectionStringBuilder builder =
new System.Data.SqlClient.SqlConnectionStringBuilder();
builder["Data Source"] = "(local)";
builder["integrated Security"] = true;
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);
Внимание
Корпорация Майкрософт рекомендует использовать самый безопасный поток проверки подлинности. Если вы подключаетесь к Azure SQL, Управляемые удостоверения для ресурсов Azure — это рекомендуемый метод проверки подлинности.
Выход показывает, что объект SqlConnectionStringBuilder правильно выполняет обработку параметра путем экранирования дополнительного значения, заключенного в двойные кавычки, вместо того чтобы добавить его в строку соединения в качестве новой пары «ключ-значение».
data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"
Создание строк подключения из файлов конфигурации
Если определенные элементы строки подключения известны заранее, они могут храниться в файле конфигурации и извлекаться во время выполнения, чтобы создать полную строку подключения. Например, имя базы данных может быть известно заранее, в отличие от имени сервера.
Один из перегруженных конструкторов для построителя строки соединения принимает в качестве аргумента значение типа String, что позволяет использовать частичную строку соединения, которую впоследствии пользователь может дополнить. Строка частичного подключения может храниться в файле конфигурации и извлекаться во время выполнения.
Примечание.
Пространство имен System.Configuration предоставляет программный доступ к файлам конфигурации, используемым WebConfigurationManager для веб-приложений и ConfigurationManager для приложений Windows. См. дополнительные сведения в статье Строки подключения и файлы конфигурации.