Aracılığıyla paylaş


Bağlantı dizesi oluşturucuları

ADO.NET'in ilk sürümlerinde, bağlantı dizelerinin birleştirilmiş dizge değerleriyle derleme zamanı denetimi gerçekleşmediğinden, çalışma zamanında yanlış bir anahtar sözcük bir ArgumentException oluşturdu. .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ı, DbConnectionStringBuilder öğesinden devralınan kesin tip tanımlı 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.

Sağlayıcı ConnectionStringBuilder 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ğlantı dizesi enjeksiyon saldırıları

Dinamik dize birleştirme, kullanıcı girişini temel alarak bağlantı dizelerini oluşturmak için kullanıldığında bağlantı dizesi ekleme saldırısı meydana gelebilir. 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 kullanarak ve ek bir değer ekleyerek saldırıyı başlatabilir. 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, SqlConnectionStringBuilder ayarına eklenen fazla değerin Initial Catalog etiketi ile nasıl işlendiği gösterilmektedir.

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

Önemli

Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Azure SQL'e bağlanıyorsanız önerilen kimlik doğrulama yöntemi Azure kaynakları için Yönetilen Kimlikler'dir.

Çıktı, SqlConnectionStringBuilder bileşeni ekstra değeri bağlantı dizgesine yeni bir anahtar/değer çifti olarak eklemek yerine çift tırnak işareti içine alarak doğru bir şekilde işlediğini gösteriyor.

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

Yapılandırma dosyalarından bağlantı dizesi oluşturma

Bir bağlantı dizesinin 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.

Bağlantı dizesi oluşturucusu için aşırı yüklenmiş oluşturuculardan biri, bir bağımsız değişken olarak String alır; bu, kullanıcıdan alınan girişlerle 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

System.Configuration ad alanı, web uygulamaları için WebConfigurationManager ve Windows uygulamaları için ConfigurationManager kullanan yapılandırma dosyalarına 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ğlantı Dizeleri ve Yapılandırma Dosyaları.

Ayrıca bkz.