Sdílet prostřednictvím


Tvůrci připojovacích řetězců

V dřívějších verzích ADO.NET nedocházelo ke kontrole připojovacích řetězců s zřetězenými hodnotami při kompilaci, takže za běhu došlo k vygenerování nesprávného klíčového slovaArgumentException. Každý z poskytovatelů dat pro rozhraní .NET Framework používal odlišnou syntaxi pro klíčová slova připojovacího řetězce, což při manuálním vytváření platných připojovacích řetězců ztěžovalo práci. Chcete-li tento problém vyřešit, ADO.NET 2.0 zavedlo nové tvůrce připojovacích řetězců pro každý zprostředkovatel dat rozhraní .NET Framework. Každý zprostředkovatel dat obsahuje třídu builderu připojovacího řetězce se silně typovaným přístupem, který dědí z DbConnectionStringBuilder. Následující tabulka uvádí zprostředkovatele dat rozhraní .NET Framework a jejich přidružené třídy pro sestavování připojovacích řetězců.

Poskytovatel Třída ConnectionStringBuilder
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

Útoky injekcí do připojovacího řetězce

Útok injektáže připojovacího řetězce může nastat, když se ke sestavení připojovacích řetězců, které jsou založeny na vstupu uživatele, používá zřetězení dynamického řetězce. Pokud se řetězec neověří a škodlivý text nebo znaky neuniknou, útočník může potenciálně získat přístup k citlivým datům nebo jiným prostředkům na serveru. Útočník by například mohl podniknout útok tak, že zadá středník a připojí další hodnotu. Připojovací řetězec se parsuje pomocí algoritmu "posledního vítěze" a nepřátelský vstup se nahradí legitimní hodnotou.

Třídy pro sestavování řetězce připojení jsou navrženy tak, aby eliminovaly odhady a chránily před chybami v syntaxi a bezpečnostními nedostatky. Poskytují metody a vlastnosti odpovídající známým párům klíč/hodnota povolených jednotlivými zprostředkovateli dat. Každá třída udržuje pevnou kolekci synonym a může přeložit synonymum na odpovídající známý název klíče. Kontroly se provádějí u platných párů klíč/hodnota a neplatný pár vyvolá výjimku. Vložené hodnoty se navíc zpracovávají bezpečným způsobem.

Následující příklad ukazuje, jak SqlConnectionStringBuilder zpracovává vloženou extra hodnotu pro Initial Catalog nastavení.

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

Důležité

Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Pokud se připojujete k Azure SQL, Spravované identity pro prostředky Azure jsou doporučenou metodou ověřování.

Výstup ukazuje, že SqlConnectionStringBuilder toto správně zpracoval tím, že extra hodnotu ohraničil dvojitými uvozovkami, místo aby ji připojil k připojovacímu řetězci jako nový pár klíč/hodnota.

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

Sestavování připojovacích řetězců z konfiguračních souborů

Pokud jsou některé prvky připojovacího řetězce známé předem, mohou být uloženy v konfiguračním souboru a načteny za běhu, aby se vytvořil úplný připojovací řetězec. Název databáze může být například známý předem, ale ne název serveru.

Jeden z přetížených konstruktorů pro tvůrce připojovacích řetězců má String jako argument, který umožňuje zadat částečný připojovací řetězec, který je pak možné dokončit na základě vstupu uživatele. Částečný připojovací řetězec lze uložit do konfiguračního souboru a načíst ho za běhu.

Poznámka:

Prostor System.Configuration názvů umožňuje programový přístup ke konfiguračním souborům, které používají WebConfigurationManager pro webové aplikace a ConfigurationManager pro aplikace Windows. Další informace o práci s připojovací řetězec a konfiguračními soubory naleznete v tématu Připojovací řetězce a konfigurační soubory.

Viz také