Поделиться через


Построители строк подключения

В ранних версиях ADO.NET проверка времени компиляции строка подключения со сцепленными строковыми значениями не произошла, поэтому во время выполнения неверное ключевое слово создало ArgumentException. Каждый из поставщиков данных платформа .NET Framework поддерживает разные синтаксисы для ключевых слов строка подключения, что затрудняет создание допустимых строка подключения, если это делается вручную. Для решения этой проблемы ADO.NET 2.0 появились новые строка подключения построители для каждого поставщика данных платформа .NET Framework. Каждый поставщик данных включает класс построителя строк соединения со строгой типизацией, наследованный от класса DbConnectionStringBuilder. В следующей таблице перечислены поставщики данных платформа .NET Framework и связанные с ними классы построителя строка подключения.

Provider Класс ConnectionStringBuilder
System.Data.SqlClient System.Data.SqlClient.SqlConnectionStringBuilder
System.Data.OleDb System.Data.OleDb.OleDbConnectionStringBuilder
System.Data.Odbc System.Data.Odbc.OdbcConnectionStringBuilder
System.Data.OracleClient System.Data.OracleClient.OracleConnectionStringBuilder

Атаки путем внедрения кода в строку подключения

Атака путем внедрения данных в строку соединения может произойти при использовании динамического объединения строк для построения строк соединения, основанных на входных данных пользователя. Если строка не проверяется, а вредоносный текст или символы не экранируются, злоумышленник может получить потенциальный доступ к конфиденциальным данным или другим ресурсам сервера. Например, злоумышленник может осуществить атаку, установив точку с запятой и добавив дополнительное значение. Строка подключения анализируется по алгоритму побеждает последний, и недопустимые входные данные заменяются допустимыми значениями.

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

В следующем примере показано, как 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);

Внимание

Корпорация Майкрософт рекомендует использовать самый безопасный поток проверки подлинности. Если вы подключаетесь к SQL Azure, управляемые удостоверения для ресурсов Azure — это рекомендуемый метод проверки подлинности.

Выход показывает, что объект SqlConnectionStringBuilder правильно выполняет обработку параметра путем экранирования дополнительного значения, заключенного в двойные кавычки, вместо того чтобы добавить его в строку соединения в качестве новой пары «ключ-значение».

data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"

Создание строк подключения из файлов конфигурации

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

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

Примечание.

Пространство имен разрешает программный System.Configuration доступ к файлам конфигурации, которые используются WebConfigurationManager для веб-приложений и ConfigurationManager приложений Windows. См. дополнительные сведения в статье Строки подключения и файлы конфигурации.

См. также