Aracılığıyla paylaş


Bağlantı Dizesi Oluşturucular

ADO.NET'in önceki sürümlerinde, bağlantı dizesi birleştirilmiş dize değerleriyle derleme zamanı denetimi gerçekleşmediğinden, çalışma zamanında yanlış bir anahtar sözcük tarafından oluşturulmuşturArgumentException. .NET Framework veri sağlayıcılarının her biri bağlantı dizesi anahtar sözcükler için farklı söz dizimini desteklediğinden, el ile yapıldığında geçerli bağlantı dizesi oluşturma zorlaştı. Bu sorunu gidermek için, ADO.NET 2.0 her .NET Framework veri sağlayıcısı için yeni bağlantı dizesi oluşturucuları kullanıma sunulmuştur. Her veri sağlayıcısı, öğesinden DbConnectionStringBuilderdevralınan kesin türemiş bir bağlantı dizesi oluşturucu sınıfı içerir. Aşağıdaki tabloda .NET Framework veri sağlayıcıları ve ilişkili bağlantı dizesi oluşturucu sınıfları listelenmektedir.

Provider Bağlan ionStringBuilder sınıfı
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

Bağlan İyon Dizesi Ekleme Saldırıları

Kullanıcı girişini temel alan bağlantı dizesi oluşturmak için dinamik dize birleştirme kullanıldığında bağlantı dizesi ekleme saldırısı oluşabilir. Dize doğrulanmamışsa ve kötü amaçlı metinler veya karakterler kaçmıyorsa, saldırgan hassas verilere veya sunucudaki diğer kaynaklara erişebilir. Örneğin, bir saldırgan noktalı virgül sağlayarak ve ek bir değer ekleyerek saldırıyı bağlayabilir. bağlantı dizesi bir "son kazanan" algoritması kullanılarak ayrıştırılır ve düşman girişi meşru bir değerle değiştirilir.

bağlantı dizesi oluşturucu sınıfları, tahmin çalışmalarını ortadan kaldırmak ve söz dizimi hatalarına ve güvenlik açıklarına karşı koruma sağlamak için tasarlanmıştır. Her veri sağlayıcısı tarafından izin verilen bilinen anahtar/değer çiftlerine karşılık gelen yöntemler ve özellikler sağlar. Her sınıf sabit bir eş anlamlılar koleksiyonu tutar ve eş anlamlıdan ilgili iyi bilinen anahtar adına çevirebilir. Geçerli anahtar/değer çiftleri için denetimler gerçekleştirilir ve geçersiz bir çift özel durum oluşturur. Ek olarak, eklenen değerler güvenli bir şekilde işlenir.

Aşağıdaki örnekte, ayarın SqlConnectionStringBuilder eklenen ek değerinin nasıl işlendiği gösterilmektedir 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);  

Çıkışta, çift tırnak işareti içindeki ek değerden yeni bir anahtar/değer çifti olarak bağlantı dizesi eklemek yerine kaçarak bunu doğru şekilde işlediği gösterilirSqlConnectionStringBuilder.

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

Yapılandırma Dosyalarından Bağlan Ion Dizeleri Oluşturma

bir bağlantı dizesi belirli öğeleri önceden biliniyorsa, bunlar bir yapılandırma dosyasında depolanabilir ve tam bir bağlantı dizesi oluşturmak için çalışma zamanında alınabilir. Örneğin, veritabanının adı önceden biliniyor olabilir, ancak sunucunun adı bilinmeyebilir. Veya kullanıcının bağlantı dizesi başka değerler eklemeden çalışma zamanında bir ad ve parola sağlamasını isteyebilirsiniz.

bağlantı dizesi oluşturucusu için aşırı yüklenmiş oluşturuculardan biri bağımsız değişken olarak alır String ve bu da kullanıcı girişinden tamamlanabilecek kısmi bir bağlantı dizesi sağlamanıza olanak tanır. Kısmi bağlantı dizesi bir yapılandırma dosyasında depolanabilir ve çalışma zamanında alınabilir.

Not

Ad alanı, System.Configuration Web uygulamaları ve Windows uygulamaları için öğesini kullanan WebConfigurationManager yapılandırma dosyalarına ConfigurationManager programlı erişim sağlar. bağlantı dizesi ve yapılandırma dosyalarıyla çalışma hakkında daha fazla bilgi için bkz. Bağlan Ion Dizeleri ve Yapılandırma Dosyaları.

Örnek

Bu örnekte, bir yapılandırma dosyasından kısmi bağlantı dizesi alma ve öğesinin DataSource, UserIDve Password özelliklerini ayarlayarak bu bağlantı dizesi tamamlama işlemi gösterilmektedirSqlConnectionStringBuilder. Yapılandırma dosyası aşağıdaki gibi tanımlanır.

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

Not

Kodun çalışması için System.Configuration.dll projenizdeki öğesine bir başvuru ayarlamanız gerekir.

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 (settings != null)
    {
        // Retrieve the partial connection string.
        var 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(connectString)
            {
                // Supply the additional values.
                DataSource = dataSource,
                UserID = userName,
                Password = userPassword
            };
        Console.WriteLine("Modified: {0}", builder.ConnectionString);
    }
}
Private Sub BuildConnectionString(ByVal dataSource As String, _
    ByVal userName As String, ByVal userPassword As String)

    ' Retrieve the partial connection string named databaseConnection
    ' from the application's app.config or web.config file.
    Dim settings As ConnectionStringSettings = _
       ConfigurationManager.ConnectionStrings("partialConnectString")

    If Not settings Is Nothing Then
        ' Retrieve the partial connection string.
        Dim connectString As String = settings.ConnectionString
        Console.WriteLine("Original: {0}", connectString)

        ' Create a new SqlConnectionStringBuilder based on the
        ' partial connection string retrieved from the config file.
        Dim builder As New SqlConnectionStringBuilder(connectString)

        ' Supply the additional values.
        builder.DataSource = dataSource
        builder.UserID = userName
        builder.Password = userPassword

        Console.WriteLine("Modified: {0}", builder.ConnectionString)
    End If
End Sub

Ayrıca bkz.