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


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

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

Поставщик Класс 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. См. дополнительные сведения в статье Строки подключения и файлы конфигурации.

См. также