Megosztás:


Kapcsolati sztringkészítők

A következőre vonatkozik: .NET Framework .NET .NET Standard

ADO.NET letöltése

A ADO.NET korábbi verzióiban nem történt meg az összefűzött sztringértékekkel rendelkező kapcsolati sztringek fordítási idejének ellenőrzése, így futásidőben helytelen kulcsszó generált egy ArgumentException. A Microsoft SqlClient adatcsatlakozó for SQL Server tartalmazza a kapcsolati sztringkészítő osztályt Microsoft.Data.SqlClient.SqlConnectionStringBuilder, amely örököl a DbConnectionStringBuilder osztályból.

Kapcsolati sztring injektálási támadásai

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öveg vagy karakterek nincsenek eltávolítva, 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 másik érték hozzáfűzésével indíthat támadást. A kapcsolati sztringet egy "utolsó nyer" algoritmussal elemzi a rendszer, és a rendszer lecseréli az ellenséges bemenetet egy megbízható értékre.

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 adatszolgáltató á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. Érvényes kulcs/érték párok ellenőrzése történik, é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.

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "(local)";
builder.IntegratedSecurity = true;
builder.InitialCatalog = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);

A kimenet azt mutatja, hogy a SqlConnectionStringBuilder rendszer helyesen 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 sztringhez.

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

Kapcsolati sztring összeállítása konfigurációs fájlokból

Ha a kapcsolati sztring bizonyos elemei előre ismertek, akkor azok 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 lehetne szúrni a kapcsolati sztringbe.

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árolható, és futtatáskor kérhető le.

Megjegyzé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: Kapcsolati sztringek és konfigurációs fájlok.

Example

Ez a példa bemutatja, hogyan lehet beolvasni egy részleges kapcsolati sztringet egy konfigurációs fájlból, és hogyan lehet azt befejezni a SqlConnectionStringBuilder tulajdonságainak, úgymint DataSource, UserID, és Password, beállításával. A konfigurációs fájl a következőképpen van definiálva.

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

Megjegyzés:

A kód futtatásához be kell állítania egy hivatkozást a System.Configuration.dll-re a projektjében.

private 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 (null != settings)
    {
        // Retrieve the partial connection string.
        string 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 SqlConnectionStringBuilder(connectString);

        // Supply the additional values.
        builder.DataSource = dataSource;
        builder.UserID = userName;
        builder.Password = userPassword;
        Console.WriteLine("Modified: {0}", builder.ConnectionString);
    }
}

Lásd még