Konstruktorzy parametrów połączeń

We wcześniejszych 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 Połączenie ionStringBuilder, 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 ciągów Połączenie ion

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. Kontrole są wykonywane dla prawidłowych par 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);  

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 ciągów Połączenie ion 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. Możesz też chcieć, aby użytkownik podać nazwę i hasło w czasie wykonywania bez możliwości wstrzykiwania innych wartości do parametry połączenia.

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 korzystających 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 Połączenie ion Strings and Configuration Files (Ciągi Połączenie ion i pliki konfiguracji).

Przykład

W tym przykładzie pokazano pobieranie częściowych parametry połączenia z pliku konfiguracji i ukończenie go przez ustawienie DataSourcewłaściwości , UserIDi Password .SqlConnectionStringBuilder Plik konfiguracji jest zdefiniowany w następujący sposób.

<connectionStrings>  
  <clear/>  
  <add name="partialConnectString"
    connectionString="Initial Catalog=Northwind;"  
    providerName="System.Data.SqlClient" />  
</connectionStrings>  

Uwaga

Musisz ustawić odwołanie do System.Configuration.dll elementu w projekcie, aby kod został uruchomiony.

static void BuildConnectionString(string dataSource,
    string userName, string userPassword)
{
    // Retrieve the partial connection string named databaseConnection
    // from the application's app.config or web.config file.
    ConnectionStringSettings settings =
        ConfigurationManager.ConnectionStrings["partialConnectString"];

    if (settings != null)
    {
        // Retrieve the partial connection string.
        var connectString = settings.ConnectionString;
        Console.WriteLine("Original: {0}", connectString);

        // Create a new SqlConnectionStringBuilder based on the
        // partial connection string retrieved from the config file.
        SqlConnectionStringBuilder builder =
            new(connectString)
            {
                // Supply the additional values.
                DataSource = dataSource,
                UserID = userName,
                Password = userPassword
            };
        Console.WriteLine("Modified: {0}", builder.ConnectionString);
    }
}
Private Sub BuildConnectionString(ByVal dataSource As String, _
    ByVal userName As String, ByVal userPassword As String)

    ' Retrieve the partial connection string named databaseConnection
    ' from the application's app.config or web.config file.
    Dim settings As ConnectionStringSettings = _
       ConfigurationManager.ConnectionStrings("partialConnectString")

    If Not settings Is Nothing Then
        ' Retrieve the partial connection string.
        Dim connectString As String = settings.ConnectionString
        Console.WriteLine("Original: {0}", connectString)

        ' Create a new SqlConnectionStringBuilder based on the
        ' partial connection string retrieved from the config file.
        Dim builder As New SqlConnectionStringBuilder(connectString)

        ' Supply the additional values.
        builder.DataSource = dataSource
        builder.UserID = userName
        builder.Password = userPassword

        Console.WriteLine("Modified: {0}", builder.ConnectionString)
    End If
End Sub

Zobacz też