Kapcsolati karakterlánc-összeállítók

A ADO.NET korai verzióiban az összefűzött sztringértékekkel rendelkező kapcsolati sztringek fordítási idejének 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 szigorúan típusos kapcsolati karakterlánc összeállító 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ó ConnectionStringBuilder 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

Kapcsolati karakterlánc injektálásos 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. Például, egy támadó indíthat támadást egy pontosvessző megadásával, és egy további érték hozzáfűzésével. A kapcsolati karakterláncot egy „utolsó nyer” elvű algoritmus elemzi, é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. É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 SqlConnectionStringBuilder kezeli a 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);

Fontos

A Microsoft azt javasolja, hogy a legbiztonságosabb hitelesítési folyamatot használja. Ha az Azure SQL-hez csatlakozik, az Azure-erőforrásokhoz használt felügyelt identitások az ajánlott hitelesítési módszer.

A kimenet azt mutatja, hogy a SqlConnectionStringBuilder ezt helyesen kezelte azzal, hogy a plusz értéket dupla idézőjelbe helyezte, ahelyett hogy új kulcs/érték párosként fűzte volna hozzá 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, egy konfigurációs fájlban tárolhatók, és futásidőben 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.

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 futásidőben kérhető le.

Megjegyzés

A System.Configuration névtér programozott hozzáférést biztosít a webalkalmazásokhoz és a WebConfigurationManagerConfigurationManager Windows-alkalmazásokhoz használt 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.

Lásd még