Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: .NET Framework
.NET
Standard
V dřívějších verzích ADO.NET nedocházelo ke kontrole připojovacích řetězců v čase kompilace se zřetězenými řetězcovými hodnotami, takže v době běhu se generovalo nesprávné klíčové slovo ArgumentException. Zprostředkovatel dat Microsoft SqlClient pro SQL Server obsahuje třídu tvůrce připojovacích řetězců Microsoft.Data.SqlClient.SqlConnectionStringBuilder, která dědí z DbConnectionStringBuilder.
Útoky prostřednictvím injektáže připojovacího řetězce
Útok připojovací řetězec injektáže může nastat, když se k sestavení připojovací řetězec založených 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 provést útok tak, že zadá středník a připojí jinou hodnotu. Připojovací řetězec se parsuje pomocí algoritmu "last one wins" a nepřátelský vstup se nahradí legitimní hodnotou.
Třídy tvůrce připojovací řetězec jsou navržené tak, aby eliminovaly odhady a chránily před chybami syntaxe a ohroženími zabezpečení. Poskytují metody a vlastnosti odpovídající známým párům klíč/hodnota povolených poskytovatelem dat. Každá třída udržuje pevnou kolekci synonym a může přeložit ze synonyma na odpovídající dobře 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 také 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í.
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "(local)";
builder.IntegratedSecurity = true;
builder.InitialCatalog = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);
Výstup ukazuje, že SqlConnectionStringBuilder to zpracoval správně tím, že extra hodnotu ohraničil dvojitými uvozovkami namísto jejího připojení k připojovacímu řetězci jako nový klíč/hodnota pár.
data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"
Sestavení připojovací řetězec z konfiguračních souborů
Pokud jsou určité 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. Nebo můžete chtít, aby uživatel zadal jméno a heslo za běhu, aniž by do připojovacího řetězce mohl vkládat další hodnoty.
Jeden z přetížených konstruktorů pro tvůrce připojovací řetězec má String jako argument, který umožňuje zadat částečné připojovací řetězec, které je pak možné dokončit ze 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:
Obor 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 pro 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.
Example
Tento příklad ukazuje načtení částečného připojovacího řetězce z konfiguračního souboru a jeho dokončení nastavením DataSource, UserIDa Password vlastnosti SqlConnectionStringBuilder. Konfigurační soubor je definován následujícím způsobem.
<connectionStrings>
<clear/>
<add name="partialConnectString"
connectionString="Initial Catalog=Northwind;"
providerName="Microsoft.Data.SqlClient" />
</connectionStrings>
Poznámka:
Abyste mohli kód spustit, musíte v projektu nastavit odkaz na System.Configuration.dll.
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);
}
}