Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: .NET Framework
.NET
Standard
In eerdere versies van ADO.NET is het controleren van de verbindingsreeksen met samengevoegde tekenreekswaarden niet uitgevoerd, zodat er tijdens runtime een onjuist trefwoord is gegenereerd ArgumentException. De Microsoft SqlClient-gegevensprovider voor SQL Server bevat de klasse voor de opbouwfunctie Microsoft.Data.SqlClient.SqlConnectionStringBuilder voor verbindingsreeksen die overneemt van DbConnectionStringBuilder.
Verbindingsreeksinjectieaanvallen
Een verbindingsreeks injectieaanval kan optreden wanneer dynamische tekenreekssamenvoeging wordt gebruikt om verbindingsreeks s te bouwen die zijn gebaseerd op gebruikersinvoer. Als de tekenreeks niet is gevalideerd en er geen schadelijke tekst of tekens zijn ontsnapt, heeft een aanvaller mogelijk toegang tot gevoelige gegevens of andere resources op de server. Een aanvaller kan bijvoorbeeld een aanval uitvoeren door een puntkomma aan te leveren en een andere waarde toe te voegen. De verbindingsreeks wordt geparseerd met behulp van een algoritme 'last one wins' en de vijandige invoer wordt vervangen door een legitieme waarde.
De verbindingsreeks builderklassen zijn ontworpen om schattingen te elimineren en te beschermen tegen syntaxisfouten en beveiligingsproblemen. Ze bieden methoden en eigenschappen die overeenkomen met de bekende sleutel-/waardeparen die zijn toegestaan door de gegevensprovider. Elke klasse onderhoudt een vaste verzameling synoniemen en kan vertalen van een synoniem naar de bijbehorende bekende sleutelnaam. Er worden controles uitgevoerd voor geldige sleutel-/waardeparen en een ongeldig paar genereert een uitzondering. Bovendien worden geïnjecteerde waarden op een veilige manier verwerkt.
In het volgende voorbeeld ziet u hoe een SqlConnectionStringBuilder een extra ingevoegde waarde voor de Initial Catalog instelling verwerkt.
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "(local)";
builder.IntegratedSecurity = true;
builder.InitialCatalog = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);
De uitvoer toont aan dat de SqlConnectionStringBuilder het correct heeft afgehandeld door de extra waarde tussen dubbele aanhalingstekens te escapen in plaats van deze aan de verbindingsreeks toe te voegen als een nieuw sleutel-/waardepaar.
data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"
Build verbindingsreeks s from configuration files
Als bepaalde elementen van een verbindingsreeks vooraf bekend zijn, kunnen ze worden opgeslagen in een configuratiebestand en tijdens runtime worden opgehaald om een volledige verbindingsreeks te maken. De naam van de database kan bijvoorbeeld van tevoren bekend zijn, maar niet de naam van de server. Of u wilt dat een gebruiker tijdens runtime een naam en wachtwoord opgeeft zonder dat andere waarden in de verbindingsreeks kunnen worden ingevoerd.
Een van de overbelaste constructors voor een verbindingsreeks-opbouwfunctie neemt een String argument op, waarmee u een gedeeltelijke verbindingsreeks kunt opgeven die vervolgens kan worden voltooid vanuit gebruikersinvoer. De gedeeltelijke verbindingsreeks kan worden opgeslagen in een configuratiebestand en worden opgehaald tijdens runtime.
Opmerking
De System.Configuration naamruimte biedt programmatische toegang tot configuratiebestanden die gebruikmaken van de WebConfigurationManager voor webtoepassingen en de ConfigurationManager voor Windows-toepassingen. Zie Verbindingsreeksen en configuratiebestanden voor meer informatie over het werken met verbindingsreeks s en configuratiebestanden.
Example
In dit voorbeeld ziet u hoe u een gedeeltelijke verbindingsreeks opzoekt uit een configuratiebestand en deze voltooit door de DataSource, UserIDen Password eigenschappen van het SqlConnectionStringBuilderbestand in te stellen. Het configuratiebestand wordt als volgt gedefinieerd.
<connectionStrings>
<clear/>
<add name="partialConnectString"
connectionString="Initial Catalog=Northwind;"
providerName="Microsoft.Data.SqlClient" />
</connectionStrings>
Opmerking
U moet een verwijzing instellen naar het System.Configuration.dll in uw project om de code uit te voeren.
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);
}
}