Freigeben über


Verbindungszeichenfolgen-Generatoren

Gilt für: .NET Framework .NET .NET Standard

Herunterladen von ADO.NET

In früheren ADO.NET-Versionen erfolgte bei der Kompilierung keine Syntaxprüfung für verkettete Zeichenfolgenwerte, sodass bei einem falschen Schlüsselwort zur Laufzeit eine ArgumentException generiert wurde. Die Microsoft SqlClient-Datenanbieter für SQL Server enthält die Verbindungszeichenfolgen-Generatorklasse Microsoft.Data.SqlClient.SqlConnectionStringBuilder, die von DbConnectionStringBuilder erbt.

Injection-Angriffe mit Verbindungszeichenfolgen

Zu einem Angriff durch Einschleusen von Verbindungszeichenfolgen kann es kommen, wenn die dynamische Zeichenfolgenverkettung verwendet wird, um auf Benutzereingabe basierende Verbindungszeichenfolgen zu konstruieren. Wenn die Zeichenfolge nicht überprüft wird und schädlicher Text oder schädliche Zeichen nicht mit Escapezeichen versehen sind, kann ein Angreifer möglicherweise auf vertrauliche Daten oder andere Ressourcen auf dem Server zugreifen. Beispielsweise könnte ein Angreifer einen Angriff einleiten, indem er ein Semikolon eingeben und einen anderen Wert anfügen würde. Die Verbindungszeichenfolge wird mit einem Last One Wins-Algorithmus (der Letzte gewinnt) analysiert, wobei der legitime Wert durch die feindliche Eingabe ersetzt wird.

Die ConnectionStringBuilder-Klassen sorgen dafür, dass das Rätselraten abgeschafft wird und die Verbindungszeichenfolgen vor Syntaxfehlern und Sicherheitslücken geschützt werden. Sie stellen Methoden und Eigenschaften bereit, die den vom jeweiligen Datenanbieter zugelassenen bekannten Schlüssel-Wert-Paaren entsprechen. Jede Klasse unterhält eine feste Sammlung von Synonymen und ist in der Lage, ein Synonym in den entsprechenden bekannten Schlüsselnamen zu übersetzen. Es werden Überprüfungen auf gültige Schlüssel-Wert-Paare durchgeführt, und ein ungültiges Paar löst eine Ausnahme aus. Außerdem werden eingefügte Werte auf sichere Weise behandelt.

Das folgende Beispiel zeigt, wie der SqlConnectionStringBuilder einen eingefügten Zusatzwert für die Initial Catalog-Einstellung behandelt.

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "(local)";
builder.IntegratedSecurity = true;
builder.InitialCatalog = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);

Die Ausgabe zeigt, dass SqlConnectionStringBuilder ihn ordnungsgemäß behandelt hat, indem der zusätzliche Wert in doppelte Anführungszeichen gesetzt wurde, anstatt ihn als neues Schlüssel-Wert-Paar an die Verbindungszeichenfolge anzufügen.

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

Erstellen von Verbindungszeichenfolgen aus Konfigurationsdateien

Wenn bestimmte Elemente einer Verbindungszeichenfolge vorab bekannt sind, können sie in einer Konfigurationsdatei gespeichert und zur Laufzeit zum Konstruieren einer vollständigen Verbindungszeichenfolge abgerufen werden. So ist es z. B. denkbar, dass zwar der Name der Datenbank, nicht aber der Name des Servers vorab bekannt ist. Oder Sie möchten, dass ein Benutzer zur Laufzeit einen Namen und ein Kennwort angibt, ohne andere Werte in die Verbindungszeichenfolge einzugeben.

Einer der überladenen Konstruktoren für einen Verbindungszeichenfolgen-Generator verwendet eine String als Argument, sodass Sie eine Teilverbindungszeichenfolge bereitstellen können, die dann zur Vervollständigung der Benutzereingabe verwendet wird. Die Teilverbindungszeichenfolge kann in einer Konfigurationsdatei gespeichert und zur Laufzeit abgerufen werden.

Hinweis

Der System.Configuration-Namespace ermöglicht den programmgesteuerten Zugriff auf Konfigurationsdateien unter Verwendung des WebConfigurationManager bei Webanwendungen und des ConfigurationManager bei Windows-Anwendungen. Weitere Informationen zum Arbeiten mit Verbindungszeichenfolgen und Konfigurationsdateien finden Sie unter Verbindungszeichenfolgen und Konfigurationsdateien.

Beispiel

Dieses Beispiel zeigt, wie Sie durch Festlegen der Eigenschaften DataSource, UserID und Password des SqlConnectionStringBuilder eine Teilverbindungszeichenfolge aus einer Konfigurationsdatei abrufen und vervollständigen können. Die Konfigurationsdatei ist wie folgt definiert:

<connectionStrings>
  <clear/>
  <add name="partialConnectString"
    connectionString="Initial Catalog=Northwind;"
    providerName="Microsoft.Data.SqlClient" />
</connectionStrings>

Hinweis

Sie müssen in Ihrem Projekt einen Verweis auf System.Configuration.dll angeben, damit der Code ausgeführt wird.

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

Weitere Informationen