Csatlakozás ion String Builders

A ADO.NET korábbi verzióiban az összefűzött sztringértékekkel rendelkező kapcsolati sztring fordítási idő ellenőrzése nem történt meg, így futásidőben helytelen kulcsszó generált egy ArgumentException. Minden .NET-keretrendszer adatszolgáltató különböző szintaxist támogatott kapcsolati sztring kulcsszavakhoz, ami megnehezítette az érvényes kapcsolati sztring manuális létrehozását. A probléma megoldásához ADO.NET 2.0 új kapcsolati sztring-szerkesztőket vezetett be az egyes .NET-keretrendszer adatszolgáltatókhoz. Minden adatszolgáltató tartalmaz egy erősen gépelt kapcsolati sztring builder osztályt, amely a következőtől DbConnectionStringBuilderöröklődik: . Az alábbi táblázat a .NET-keretrendszer adatszolgáltatókat és a hozzájuk tartozó kapcsolati sztring szerkesztőosztályokat sorolja fel.

Szolgáltató Csatlakozás ionStringBuilder osztály
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

Csatlakozás ion sztringinjektálási támadások

Kapcsolati sztring injektálási támadás akkor fordulhat elő, ha dinamikus sztringösszefűzést használnak a felhasználói bemeneten alapuló kapcsolati sztring létrehozásához. Ha a sztring nincs érvényesítve, és a rosszindulatú szövegek vagy karakterek nem szöknek meg, a támadók esetleg hozzáférhetnek a kiszolgálón lévő bizalmas adatokhoz vagy más erőforrásokhoz. Egy támadó például egy pontosvessző megadásával és egy további érték hozzáfűzésével csatlakoztathat támadást. A kapcsolati sztring egy "utolsó nyer" algoritmussal elemzik, és az ellenséges bemenetet a rendszer egy jogos értékre cseréli.

A kapcsolati sztring szerkesztőosztályok célja a találgatások kiküszöbölése, valamint a szintaxishibák és biztonsági rések elleni védelem. Az egyes adatszolgáltatók által engedélyezett ismert kulcs-érték pároknak megfelelő metódusokat és tulajdonságokat biztosítanak. Minden osztály egy rögzített szinonimagyűjteményt tart fenn, és szinonimából lefordítható a megfelelő jól ismert kulcsnévre. A rendszer érvényes kulcs-/értékpárokat ellenőriz, és egy érvénytelen pár kivételt jelez. Emellett az injektált értékeket biztonságosan kezelik.

Az alábbi példa bemutatja, hogyan kezeli a SqlConnectionStringBuilder beszúrt extra értéket a Initial Catalog beállításhoz.

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);  

A kimenet azt mutatja, hogy ezt helyesen SqlConnectionStringBuilder kezelte úgy, hogy a plusz értéket dupla idézőjelek közé helyezi ahelyett, hogy új kulcs/érték párként hozzáfűzné a kapcsolati sztring.

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

Csatlakozás ion-sztringek létrehozása konfigurációs fájlokból

Ha egy kapcsolati sztring bizonyos elemei előre ismertek, egy konfigurációs fájlban tárolhatók, és futtatáskor lekérhetők egy teljes kapcsolati sztring létrehozásához. Előfordulhat például, hogy az adatbázis neve előre ismert, a kiszolgáló neve azonban nem. Vagy előfordulhat, hogy azt szeretné, hogy a felhasználó futásidőben adjon meg nevet és jelszót anélkül, hogy más értékeket is be tudna szúrni a kapcsolati sztring.

Egy kapcsolati sztring-szerkesztő egyik túlterhelt konstruktora argumentumként használString, amely lehetővé teszi egy részleges kapcsolati sztring megadását, amelyet aztán a felhasználói bemenetből lehet elvégezni. A részleges kapcsolati sztring egy konfigurációs fájlban tárolhatja, és futtatáskor lekérheti.

Feljegyzés

A System.Configuration névtér programozott hozzáférést biztosít a webalkalmazásokat és a WebConfigurationManagerConfigurationManager Windows-alkalmazásokat használó konfigurációs fájlokhoz. A kapcsolati sztring és a konfigurációs fájlok használatával kapcsolatos további információkért lásd a Csatlakozás ion sztringeket és konfigurációs fájlokat.

Példa

Ez a példa bemutatja egy részleges kapcsolati sztring egy konfigurációs fájlból való lekérését, majd a konfigurációs fájl tulajdonságainak beállításával DataSourceUserIDPassword való kiegészítését.SqlConnectionStringBuilder A konfigurációs fájl a következőképpen van definiálva.

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

Feljegyzés

A kód futtatásához meg kell adnia egy hivatkozást a System.Configuration.dll projektben.

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

Lásd még