Anslutningssträngsbyggare
I tidiga versioner av ADO.NET uppstod inte kompileringstidskontroll av niska veze med sammanfogade strängvärden, så att ett felaktigt nyckelord genererade ett ArgumentException. Var och en av .NET Framework-dataprovidrar stödde olika syntaxer för niska veze nyckelord, vilket gjorde det svårt att konstruera giltiga niska veze om det gjordes manuellt. För att lösa det här problemet introducerade ADO.NET 2.0 nya niska veze-byggare för varje .NET Framework-dataprovider. Varje dataprovider innehåller en starkt skriven niska veze builder-klass som ärver från DbConnectionStringBuilder. I följande tabell visas .NET Framework-dataprovidrar och deras associerade niska veze builder-klasser.
Inmatningsattacker för anslutningssträngar
En niska veze inmatningsattack kan inträffa när dynamisk strängsammanfogning används för att skapa niska veze som baseras på användarindata. Om strängen inte är validerad och skadlig text eller tecken inte är undantagna kan en angripare komma åt känsliga data eller andra resurser på servern. En angripare kan till exempel montera en attack genom att ange ett semikolon och lägga till ytterligare ett värde. Niska veze parsas med hjälp av algoritmen "senaste vinner" och de fientliga indata ersätts med ett legitimt värde.
Niska veze builder-klasserna är utformade för att eliminera gissningar och skydda mot syntaxfel och säkerhetsrisker. De tillhandahåller metoder och egenskaper som motsvarar de kända nyckel/värde-par som tillåts av varje dataprovider. Varje klass har en fast samling synonymer och kan översättas från en synonym till motsvarande välkända nyckelnamn. Kontroller utförs för giltiga nyckel/värde-par och ett ogiltigt par genererar ett undantag. Dessutom hanteras inmatade värden på ett säkert sätt.
I följande exempel visas hur SqlConnectionStringBuilder du hanterar ett infogat extra värde för inställningen Initial Catalog
.
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);
Viktigt!
Microsoft rekommenderar att du använder det säkraste tillgängliga autentiseringsflödet. Om du ansluter till Azure SQL är hanterade identiteter för Azure-resurser den rekommenderade autentiseringsmetoden.
Utdata visar att det SqlConnectionStringBuilder hanterade detta korrekt genom att undvika det extra värdet inom dubbla citattecken i stället för att lägga till det i niska veze som ett nytt nyckel/värde-par.
data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"
Skapa niska veze från konfigurationsfiler
Om vissa element i en niska veze är kända i förväg kan de lagras i en konfigurationsfil och hämtas vid körning för att skapa en fullständig niska veze. Namnet på databasen kan till exempel vara känt i förväg, men inte namnet på servern.
En av de överbelastade konstruktorerna för en niska veze builder tar ett String som argument, vilket gör att du kan ange en partiell niska veze som sedan kan slutföras från användarindata. Den partiella niska veze kan lagras i en konfigurationsfil och hämtas vid körning.
Kommentar
Namnområdet System.Configuration ger programmatisk åtkomst till konfigurationsfiler som använder WebConfigurationManager för webbappar och ConfigurationManager för Windows-program. Mer information om hur du arbetar med niska veze och konfigurationsfiler finns i Anslutningssträngar och Konfigurationsfiler.