Dela via


Anslut ion String Builders

I tidigare versioner av ADO.NET uppstod inte kompileringstidskontroll av anslutningssträng med sammanfogade strängvärden, så att ett felaktigt nyckelord genererade ett ArgumentException. Var och en av .NET Framework-dataprovidrar stödde olika syntaxer för anslutningssträng nyckelord, vilket gjorde det svårt att konstruera giltiga anslutningssträng om det gjordes manuellt. För att lösa det här problemet introducerade ADO.NET 2.0 nya anslutningssträng-byggare för varje .NET Framework-dataprovider. Varje dataprovider innehåller en starkt skriven anslutningssträng builder-klass som ärver från DbConnectionStringBuilder. I följande tabell visas .NET Framework-dataprovidrar och deras associerade anslutningssträng builder-klasser.

Provider Anslut ionStringBuilder-klass
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

Anslut ionsstränginmatningsattacker

En anslutningssträng inmatningsattack kan inträffa när dynamisk strängsammanfogning används för att skapa anslutningssträng som baseras på användarindata. Om strängen inte är validerad och skadlig text eller tecken inte är undantagna kan en angripare komma åt känsliga data eller andra resurser på servern. En angripare kan till exempel montera en attack genom att ange ett semikolon och lägga till ytterligare ett värde. Anslutningssträng parsas med hjälp av algoritmen "senaste vinner" och de fientliga indata ersätts med ett legitimt värde.

Anslutningssträng builder-klasserna är utformade för att eliminera gissningar och skydda mot syntaxfel och säkerhetsrisker. De tillhandahåller metoder och egenskaper som motsvarar de kända nyckel/värde-par som tillåts av varje dataprovider. Varje klass har en fast samling synonymer och kan översättas från en synonym till motsvarande välkända nyckelnamn. Kontroller utförs för giltiga nyckel/värde-par och ett ogiltigt par genererar ett undantag. Dessutom hanteras inmatade värden på ett säkert sätt.

Följande exempel visar hur SqlConnectionStringBuilder hanterar ett infogat extra värde för inställningen 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);  

Utdata visar att det SqlConnectionStringBuilder hanterade detta korrekt genom att undvika det extra värdet inom dubbla citattecken i stället för att lägga till det i anslutningssträng som ett nytt nyckel/värde-par.

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

Skapa Anslut ionssträngar från konfigurationsfiler

Om vissa element i en anslutningssträng är kända i förväg kan de lagras i en konfigurationsfil och hämtas vid körning för att skapa en fullständig anslutningssträng. Namnet på databasen kan till exempel vara känt i förväg, men inte namnet på servern. Eller så kanske du vill att en användare ska ange ett namn och lösenord vid körning utan att kunna mata in andra värden i anslutningssträng.

En av de överbelastade konstruktorerna för en anslutningssträng builder tar ett String som argument, vilket gör att du kan ange en partiell anslutningssträng som sedan kan slutföras från användarindata. Den partiella anslutningssträng kan lagras i en konfigurationsfil och hämtas vid körning.

Kommentar

Namnområdet System.Configuration ger programmatisk åtkomst till konfigurationsfiler som använder WebConfigurationManager för webbprogram och ConfigurationManager för Windows-program. Mer information om hur du arbetar med anslutningssträng och konfigurationsfiler finns i Anslut ionssträngar och konfigurationsfiler.

Exempel

Det här exemplet visar hur du hämtar en partiell anslutningssträng från en konfigurationsfil och slutför den genom att ange DataSourceegenskaperna , UserIDoch Password för SqlConnectionStringBuilder. Konfigurationsfilen definieras på följande sätt.

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

Kommentar

Du måste ange en referens till System.Configuration.dll i projektet för att koden ska köras.

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

Se även