Udostępnij za pośrednictwem


Konstruktorzy parametrów połączenia

We wczesnych wersjach ADO.NET sprawdzanie czasu kompilacji parametry połączenia z połączonymi wartościami ciągów nie wystąpiło, więc w czasie wykonywania niepoprawne słowo kluczowe wygenerowało ArgumentException. Każdy z dostawców danych programu .NET Framework obsługiwał inną składnię dla słów kluczowych parametry połączenia, co sprawiło, że konstruowanie prawidłowych parametry połączenia jest trudne w przypadku ręcznego wykonania. Aby rozwiązać ten problem, ADO.NET 2.0 wprowadził nowe konstruktory parametry połączenia dla każdego dostawcy danych programu .NET Framework. Każdy dostawca danych zawiera silnie typizowane parametry połączenia klasy konstruktora, która dziedziczy z DbConnectionStringBuilderklasy . W poniższej tabeli wymieniono dostawców danych programu .NET Framework i skojarzonych z nimi klas konstruktorów parametry połączenia.

Dostawca ConnectionStringBuilder, klasa
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

Ataki iniekcji parametrów połączenia

Atak polegający na wstrzyknięciu parametry połączenia może wystąpić, gdy łączenie ciągów dynamicznych jest używane do tworzenia parametry połączenia opartych na danych wejściowych użytkownika. Jeśli ciąg nie zostanie zweryfikowany, a złośliwy tekst lub znaki nie zostały usunięte, osoba atakująca może uzyskać dostęp do poufnych danych lub innych zasobów na serwerze. Na przykład osoba atakująca może zainstalować atak, podając średnik i dodając dodatkową wartość. Parametry połączenia jest analizowany przy użyciu algorytmu "ostatniego zwycięstwa", a wrogie dane wejściowe są zastępowane legalną wartością.

Klasy konstruktorów parametry połączenia zostały zaprojektowane tak, aby wyeliminować odgadywanie i chronić przed błędami składni i lukami w zabezpieczeniach. Zapewniają metody i właściwości odpowiadające znanym parom klucz/wartość dozwolonym przez każdego dostawcę danych. Każda klasa utrzymuje stałą kolekcję synonimów i może tłumaczyć się z synonimu na odpowiednią dobrze znaną nazwę klucza. Sprawdzane są prawidłowe pary klucz/wartość, a nieprawidłowa para zgłasza wyjątek. Ponadto wprowadzone wartości są obsługiwane w bezpieczny sposób.

W poniższym przykładzie pokazano, jak SqlConnectionStringBuilder obsługuje wstawioną dodatkową wartość ustawienia 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);

Ważne

Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Jeśli łączysz się z usługą Azure SQL, tożsamości zarządzane dla zasobów platformy Azure to zalecana metoda uwierzytelniania.

Dane wyjściowe pokazują, że SqlConnectionStringBuilder obsłużone to poprawnie przez ucieczkę dodatkowej wartości w podwójnych cudzysłowach zamiast dołączania jej do parametry połączenia jako nowej pary klucz/wartość.

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

Kompilowanie parametry połączenia z plików konfiguracji

Jeśli niektóre elementy parametry połączenia są znane wcześniej, mogą być przechowywane w pliku konfiguracji i pobierane w czasie wykonywania w celu utworzenia kompletnego parametry połączenia. Na przykład nazwa bazy danych może być znana z wyprzedzeniem, ale nie nazwa serwera.

Jeden z przeciążonych konstruktorów konstruktora parametry połączenia przyjmuje String jako argument, który umożliwia podanie częściowych parametry połączenia, które można następnie ukończyć z danych wejściowych użytkownika. Częściowe parametry połączenia można przechowywać w pliku konfiguracji i pobierać w czasie wykonywania.

Uwaga

System.Configuration Przestrzeń nazw umożliwia programowy dostęp do plików konfiguracji, które korzystają z WebConfigurationManager aplikacji internetowych i ConfigurationManager aplikacji systemu Windows. Aby uzyskać więcej informacji na temat pracy z plikami parametry połączenia i plikami konfiguracji, zobacz Parametry połączenia i pliki konfiguracji.

Zobacz też