Bağlantı Dizeleri ve Yapılandırma Dosyaları
Uygulamanızın koduna bağlantı dizeleri katıştırmak, güvenlik açıklarına ve bakım sorunlarına yol açabilir. Bir uygulamanın kaynak kodunda derlenen şifrelenmemiş bağlantı dizeleri Ildasm.exe (IL Disassembler) Aracı kullanılarak görüntülenebilir. Ayrıca, bağlantı dizesi herhangi bir zaman değişirse uygulamanızın yeniden derlenmesi gerekir. Bu nedenlerden dolayı, bağlantı dizelerini bir uygulama yapılandırma dosyasında depolamanızı öneririz.
Uygulama yapılandırma dosyalarıyla çalışma
Uygulama yapılandırma dosyaları, belirli bir uygulamaya özgü ayarları içerir. örneğin, bir ASP.NET uygulama bir veya daha fazla web.config dosyasına sahip olabilir ve bir Windows uygulaması isteğe bağlı bir app.config dosyasına sahip olabilir. Yapılandırma dosyaları ortak öğeleri paylaşır, ancak bir yapılandırma dosyasının adı ve konumu uygulamanın ana bilgisayarına bağlı olarak değişir.
ConnectionStrings bölümü
Bağlantı dizeleri, bir uygulama yapılandırma dosyasının yapılandırma öğesinin connectionStrings bölümünde anahtar/değer çiftleri olarak depolanabilir. Alt öğeler ekleme, Temizleme ve kaldırma içerir.
Aşağıdaki yapılandırma dosyası parçası, bir bağlantı dizesini depolamak için şemayı ve sözdizimini gösterir. Ad özniteliği, bir bağlantı dizesini, çalışma zamanında alınabilmesi için benzersiz şekilde tanımlamak için sağladığınız addır. providerName , machine.config dosyasında kayıtlı .NET Framework veri sağlayıcısının sabit adıdır.
<?xml version='1.0' encoding='utf-8'?>
<configuration>
<connectionStrings>
<clear />
<add name="Name"
providerName="System.Data.ProviderName"
connectionString="Valid Connection String;" />
</connectionStrings>
</configuration>
Not
Bir bağlantı dizesinin bir bölümünü yapılandırma dosyasına kaydedebilir ve DbConnectionStringBuilder çalışma zamanında bunu gerçekleştirmek için sınıfını kullanabilirsiniz. Bu, bağlantı dizesinin, zaman içinde veya bir yapılandırma dosyasına hassas bilgileri kaydetmek istemediğiniz senaryolarda faydalıdır... Daha fazla bilgi için bkz. bağlantı dizesi oluşturucuları.
Dış yapılandırma dosyalarını kullanma
Dış yapılandırma dosyaları, tek bir bölümden oluşan bir yapılandırma dosyasının bir parçasını içeren ayrı dosyalardır. Dış yapılandırma dosyasına daha sonra ana yapılandırma dosyası tarafından başvurulur. ConnectionString bölümünü fiziksel olarak ayrı bir dosyada depolamak, uygulama dağıtıldıktan sonra bağlantı dizelerinin düzenlenebileceği durumlarda faydalıdır. örneğin, standart ASP.NET davranışı yapılandırma dosyaları değiştirildiğinde bir uygulama etki alanını yeniden başlatmakta, bu da durum bilgilerinin kaybolmasına neden olur. Ancak, bir dış yapılandırma dosyasının değiştirilmesi, uygulamanın yeniden başlatılmasına neden olmaz. Dış yapılandırma dosyaları ASP.NET ile sınırlı değildir; ayrıca, Windows uygulamalar tarafından da kullanılabilir. Ayrıca, dosya erişimi güvenliği ve izinleri dış yapılandırma dosyalarına erişimi kısıtlamak için kullanılabilir. Çalışma zamanında dış yapılandırma dosyalarıyla çalışma işlemi saydamdır ve özel bir kodlama gerektirmez.
Bağlantı dizelerini bir dış yapılandırma dosyasında depolamak için, yalnızca connectionStrings bölümünü içeren ayrı bir dosya oluşturun. Herhangi bir ek öğe, bölüm veya öznitelik eklemeyin. Bu örnek, bir dış yapılandırma dosyası için söz dizimini gösterir.
<connectionStrings>
<add name="Name"
providerName="System.Data.ProviderName"
connectionString="Valid Connection String;" />
</connectionStrings>
Ana uygulama yapılandırma dosyasında, dış dosyanın tam adını ve konumunu belirtmek için configSource özniteliğini kullanırsınız. Bu örnek adlı bir dış yapılandırma dosyası anlamına gelir connections.config .
<?xml version='1.0' encoding='utf-8'?>
<configuration>
<connectionStrings configSource="connections.config"/>
</configuration>
Çalışma zamanında bağlantı dizelerini alma
.NET Framework 2,0, System.Configuration çalışma zamanında yapılandırma dosyalarından bağlantı dizelerini almayı kolaylaştırmak için ad alanına yeni sınıflar getirmiştir. Bir bağlantı dizesini ada veya sağlayıcı adına göre program aracılığıyla alabilirsiniz.
Not
machine.config dosyası, Visual Studio tarafından kullanılan bağlantı dizelerini Içeren bir connectionStrings bölümü de içerir. Windows uygulamasındaki app.config dosyasından sağlayıcı adına göre bağlantı dizeleri alınırken, machine.config ' deki bağlantı dizeleri önce yüklenir ve ardından app.config girdileri alınır. ConnectionString öğesinden hemen sonra clear seçeneğinin eklenmesi, yalnızca yerel app.config dosyasında tanımlanan bağlantı dizelerinin kabul edilmesi için bellekteki veri yapısındaki tüm devralınan başvuruları kaldırır.
Yapılandırma sınıflarıyla çalışma
.NET Framework 2,0 ' den başlayarak, ConfigurationManager yerel bilgisayardaki yapılandırma dosyalarıyla çalışırken kullanım dışı olarak değiştirilerek kullanılır ConfigurationSettings . WebConfigurationManagerASP.NET yapılandırma dosyalarıyla çalışmak için kullanılır. Bir Web sunucusunda yapılandırma dosyalarıyla çalışmak üzere tasarlanmıştır ve System. Web gibi yapılandırma dosyası bölümlerine programlı erişim sağlar.
Not
Çalışma zamanında yapılandırma dosyalarına erişilmesi arayan için izin verilmesini gerektirir; gerekli izinler, uygulamanın, yapılandırma dosyasının ve konumun türüne bağlıdır. daha fazla bilgi için bkz. yapılandırma sınıflarını ve WebConfigurationManager ASP.NET uygulamaları ve ConfigurationManager Windows uygulamalar için kullanma.
ConnectionStringSettingsCollectionUygulama yapılandırma dosyalarından bağlantı dizelerini almak için öğesini kullanabilirsiniz. ConnectionStringSettingsHer biri ConnectionString bölümünde tek bir girişi temsil eden bir nesne koleksiyonu içerir. Özellikleri bağlantı dizesi öznitelikleriyle eşlenir ve ad ya da sağlayıcı adını belirterek bir bağlantı dizesi almanızı sağlar.
| Özellik | Açıklama |
|---|---|
| Name | Bağlantı dizesinin adı. ad özniteliğine Haritalar. |
| ProviderName | Tam sağlayıcı adı. providerName özniteliğine Haritalar. |
| ConnectionString | Bağlantı dizesi. connectionString özniteliğine Haritalar. |
Örnek: tüm bağlantı dizelerini listeleme
Bu örnek içinde yinelenir ConnectionStringSettingsCollection ve ConnectionStringSettings.Name konsol penceresinde,, ConnectionStringSettings.ProviderName ve ConnectionStringSettings.ConnectionString özelliklerini görüntüler.
Not
System.Configuration.dll tüm proje türlerine dahil değildir ve yapılandırma sınıflarını kullanabilmeniz için buna bir başvuru ayarlamanız gerekebilir. Belirli bir uygulama yapılandırma dosyasının adı ve konumu, uygulama türüne ve barındırma işlemine göre farklılık gösterir.
using System.Configuration;
class Program
{
static void Main()
{
GetConnectionStrings();
Console.ReadLine();
}
static void GetConnectionStrings()
{
ConnectionStringSettingsCollection settings =
ConfigurationManager.ConnectionStrings;
if (settings != null)
{
foreach(ConnectionStringSettings cs in settings)
{
Console.WriteLine(cs.Name);
Console.WriteLine(cs.ProviderName);
Console.WriteLine(cs.ConnectionString);
}
}
}
}
Imports System.Configuration
Class Program
Shared Sub Main()
GetConnectionStrings()
Console.ReadLine()
End Sub
Private Shared Sub GetConnectionStrings()
Dim settings As ConnectionStringSettingsCollection = _
ConfigurationManager.ConnectionStrings
If Not settings Is Nothing Then
For Each cs As ConnectionStringSettings In settings
Console.WriteLine(cs.Name)
Console.WriteLine(cs.ProviderName)
Console.WriteLine(cs.ConnectionString)
Next
End If
End Sub
End Class
Örnek: bir bağlantı dizesini ada göre alma
Bu örnek, bir yapılandırma dosyasından adını belirterek bir bağlantı dizesinin nasıl alınacağını gösterir. Kod, ConnectionStringSettings adı verilen giriş parametresiyle eşleşen bir nesne oluşturur ConnectionStrings . Eşleşen ad bulunamazsa, işlev döndürür null ( Nothing Visual Basic).
// Retrieves a connection string by name.
// Returns null if the name is not found.
static string GetConnectionStringByName(string name)
{
// Assume failure.
string returnValue = null;
// Look for the name in the connectionStrings section.
ConnectionStringSettings settings =
ConfigurationManager.ConnectionStrings[name];
// If found, return the connection string.
if (settings != null)
returnValue = settings.ConnectionString;
return returnValue;
}
' Retrieves a connection string by name.
' Returns Nothing if the name is not found.
Private Shared Function GetConnectionStringByName( _
ByVal name As String) As String
' Assume failure
Dim returnValue As String = Nothing
' Look for the name in the connectionStrings section.
Dim settings As ConnectionStringSettings = _
ConfigurationManager.ConnectionStrings(name)
' If found, return the connection string.
If Not settings Is Nothing Then
returnValue = settings.ConnectionString
End If
Return returnValue
End Function
Örnek: sağlayıcı adına göre bir bağlantı dizesi alma
Bu örnek, System. Data. ProviderName biçiminde sağlayıcı-sabit adı belirtilerek bir bağlantı dizesinin nasıl alınacağını gösterir. Kod üzerinden yinelenir ConnectionStringSettingsCollection ve ilk bulunan için bağlantı dizesini döndürür ProviderName . Sağlayıcı adı bulunamazsa, işlev döndürür null ( Nothing Visual Basic).
// Retrieve a connection string by specifying the providerName.
// Assumes one connection string per provider in the config file.
static string GetConnectionStringByProvider(string providerName)
{
// Return null on failure.
string returnValue = null;
// Get the collection of connection strings.
ConnectionStringSettingsCollection settings =
ConfigurationManager.ConnectionStrings;
// Walk through the collection and return the first
// connection string matching the providerName.
if (settings != null)
{
foreach (ConnectionStringSettings cs in settings)
{
if (cs.ProviderName == providerName)
returnValue = cs.ConnectionString;
break;
}
}
return returnValue;
}
' Retrieve a connection string by specifying the providerName.
' Assumes one connection string per provider in the config file.
Private Shared Function GetConnectionStringByProvider( _
ByVal providerName As String) As String
'Return Nothing on failure.
Dim returnValue As String = Nothing
' Get the collection of connection strings.
Dim settings As ConnectionStringSettingsCollection = _
ConfigurationManager.ConnectionStrings
' Walk through the collection and return the first
' connection string matching the providerName.
If Not settings Is Nothing Then
For Each cs As ConnectionStringSettings In settings
If cs.ProviderName = providerName Then
returnValue = cs.ConnectionString
Exit For
End If
Next
End If
Return returnValue
End Function
Korumalı yapılandırma kullanarak yapılandırma dosyası bölümlerini şifreleme
ASP.NET 2,0, korunan yapılandırma adında, önemli bilgileri bir yapılandırma dosyasında şifrelemenizi sağlayan yeni bir özellik sunmuştur. öncelikle ASP.NET için tasarlanmış olsa da, korunan yapılandırma Windows uygulamalardaki yapılandırma dosyası bölümlerini şifrelemek için de kullanılabilir. Korunan yapılandırma özelliklerine ilişkin ayrıntılı bir açıklama için bkz. korumalı yapılandırma kullanarak yapılandırma bilgilerini şifreleme.
Aşağıdaki yapılandırma dosyası parçası, şifrelendikten sonra ConnectionString bölümünü gösterir. ConfigProtectionProvider , bağlantı dizelerini şifrelemek ve şifresini çözmek için kullanılan korumalı yapılandırma sağlayıcısını belirtir. EncryptedData bölümü şifre metnini içerir.
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
şifrelenmiş bağlantı dizesi çalışma zamanında alındığında, .NET Framework ciphervalue şifresini çözmek ve uygulamanızda kullanılabilir hale getirmek için belirtilen sağlayıcıyı kullanır. Şifre çözme işlemini yönetmek için ek kod yazmanız gerekmez.
Korumalı yapılandırma sağlayıcıları
Korumalı yapılandırma sağlayıcıları, .NET Framework birlikte sağlanan iki korumalı yapılandırma sağlayıcısını gösteren aşağıdaki parçada gösterildiği gibi, yerel bilgisayardaki machine.config dosyasının configProtectedData bölümüne kaydedilir. Burada gösterilen değerler okunabilirlik için kesildi.
<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
<providers>
<add name="RsaProtectedConfigurationProvider"
type="System.Configuration.RsaProtectedConfigurationProvider" />
<add name="DataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider" />
</providers>
</configProtectedData>
machine.config dosyasına ekleyerek, ek korumalı yapılandırma sağlayıcıları yapılandırabilirsiniz. Soyut temel sınıftan devralarak, kendi korumalı yapılandırma sağlayıcınızı de oluşturabilirsiniz ProtectedConfigurationProvider . Aşağıdaki tabloda .NET Framework eklenen iki yapılandırma dosyası açıklanmaktadır.
| Sağlayıcı | Description |
|---|---|
| RsaProtectedConfigurationProvider | , Verileri şifrelemek ve şifrelerini çözmek için RSA şifreleme algoritmasını kullanır. RSA algoritması, hem ortak anahtar şifrelemesi hem de dijital imzalar için kullanılabilir. İki farklı anahtar kullandığından, "ortak anahtar" veya asymmetrik şifreleme olarak da bilinir. bir Web.config dosyasındaki bölümleri şifrelemek ve şifreleme anahtarlarını yönetmek için ASP.NET ııs kayıt aracı 'nı (Aspnet_regiis.exe) kullanabilirsiniz. ASP.NET, dosyayı işlerken yapılandırma dosyasının şifresini çözer. ASP.NET uygulamanın kimliği, şifrelenmiş bölümleri şifrelemek ve şifresini çözmek için kullanılan şifreleme anahtarına okuma erişimine sahip olmalıdır. |
| DpapiProtectedConfigurationProvider | yapılandırma bölümlerini şifrelemek için Windows Data Protection apı 'yi (dpapı) kullanır. Windows yerleşik şifreleme hizmetlerini kullanır ve makineye özel veya kullanıcı hesabına özgü koruma için yapılandırılabilir. Makineye özgü koruma, aynı sunucuda bilgi paylaşması gereken birden çok uygulama için yararlıdır. Kullanıcı hesabına özgü koruma, paylaşılan barındırma ortamı gibi belirli bir kullanıcı kimliğiyle çalışan hizmetlerle birlikte kullanılabilir. Her uygulama, dosyalar ve veritabanları gibi kaynaklarla erişimi kısıtlayan ayrı bir kimlik altında çalışır. |
Her iki sağlayıcı de verilerin güçlü şifrelenmesini sağlar. Ancak, aynı şifrelenmiş yapılandırma dosyasını bir Web grubu gibi birden çok sunucuda kullanmayı planlıyorsanız, yalnızca, RsaProtectedConfigurationProvider verileri şifrelemek ve başka bir sunucuya aktarmak için kullanılan şifreleme anahtarlarını dışarı aktarmanızı sağlar. Daha fazla bilgi için bkz. korumalı yapılandırma RSA anahtar kapsayıcılarını içeri ve dışarı aktarma.
Yapılandırma sınıflarını kullanma
Ad System.Configuration alanı, yapılandırma ayarlarıyla program aracılığıyla çalışmak için sınıflar sağlar. sınıfı ConfigurationManager makine, uygulama ve kullanıcı yapılandırma dosyalarına erişim sağlar. bir ASP.NET uygulaması oluşturuyorsanız, aynı işlevselliği sağlarken aynı zamanda içinde bulunanlar gibi, uygulamanıza özel olan ayarlara erişmeye de olanak ASP.NET WebConfigurationManager sınıfını <system.web> kullanabilirsiniz.
Not
Ad System.Security.Cryptography alanı, verileri şifrelemek ve şifresini çözmek için ek seçenekler sağlayan sınıflar içerir. Korumalı yapılandırma kullanılarak mevcut olan şifreleme hizmetlerine ihtiyaç ediyorsanız bu sınıfları kullanın. Bu sınıfların bazıları yönetilemeyen Microsoft CryptoAPI'ye yönelik sarmalayıcılar, diğerleri ise tamamen yönetilen uygulamalardır. Daha fazla bilgi için bkz. Şifreleme Hizmetleri.
App.config Örneği
Bu örnekte, Windows uygulaması için birapp.configdosyasında connectionStrings bölümünü şifrelemeyi nasıl Windows gösterir. Bu örnekte, yordam uygulamanın adını bağımsız değişken olarak alır, örneğin, "MyApplication.exe". Bu app.config dosya şifrelenir ve yürütülebilir dosyayı içeren klasöre "MyApplication.exe.config" adı altında kopyalanır.
Not
Bağlantı dizesinin şifresi yalnızca şifrelenmiş olduğu bilgisayarda çözülebilirsiniz.
Kod, düzenlemek içinapp.configaçmak için yöntemini kullanır ve OpenExeConfiguration GetSection yöntemi connectionStrings bölümünü döndürür. Kod daha sonra özelliğini IsProtected denetler ve bölümü ProtectSection şifrelenmezse şifrelemek için çağrısında bulunmaktadır. bölümünün UnprotectSection şifresini çözmek için yöntemi çağrılır. yöntemi Save işlemi tamamlar ve değişiklikleri kaydeder.
Not
Kodun çalışması için System.Configuration.dll projenize bir başvuru ayarlamanız gerekir.
static void ToggleConfigEncryption(string exeFile)
{
// Takes the executable file name without the
// .config extension.
try
{
// Open the configuration file and retrieve
// the connectionStrings section.
Configuration config = ConfigurationManager.
OpenExeConfiguration(exeConfigName);
ConnectionStringsSection section =
config.GetSection("connectionStrings")
as ConnectionStringsSection;
if (section.SectionInformation.IsProtected)
{
// Remove encryption.
section.SectionInformation.UnprotectSection();
}
else
{
// Encrypt the section.
section.SectionInformation.ProtectSection(
"DataProtectionConfigurationProvider");
}
// Save the current configuration.
config.Save();
Console.WriteLine("Protected={0}",
section.SectionInformation.IsProtected);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Shared Sub ToggleConfigEncryption(ByVal exeConfigName As String)
' Takes the executable file name without the
' .config extension.
Try
' Open the configuration file and retrieve
' the connectionStrings section.
Dim config As Configuration = ConfigurationManager. _
OpenExeConfiguration(exeConfigName)
Dim section As ConnectionStringsSection = DirectCast( _
config.GetSection("connectionStrings"), _
ConnectionStringsSection)
If section.SectionInformation.IsProtected Then
' Remove encryption.
section.SectionInformation.UnprotectSection()
Else
' Encrypt the section.
section.SectionInformation.ProtectSection( _
"DataProtectionConfigurationProvider")
End If
' Save the current configuration.
config.Save()
Console.WriteLine("Protected={0}", _
section.SectionInformation.IsProtected)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
Web.config Örneği
Bu örnek, OpenWebConfiguration yöntemini WebConfigurationManager kullanır. Bu durumda, bir tilde kullanarak dosyanınWeb.config yolunu sebilirsiniz. Kod, sınıfına bir başvuru System.Web.Configuration gerektirir.
static void ToggleWebEncrypt()
{
// Open the Web.config file.
Configuration config = WebConfigurationManager.
OpenWebConfiguration("~");
// Get the connectionStrings section.
ConnectionStringsSection section =
config.GetSection("connectionStrings")
as ConnectionStringsSection;
// Toggle encryption.
if (section.SectionInformation.IsProtected)
{
section.SectionInformation.UnprotectSection();
}
else
{
section.SectionInformation.ProtectSection(
"DataProtectionConfigurationProvider");
}
// Save changes to the Web.config file.
config.Save();
}
Shared Sub ToggleWebEncrypt()
' Open the Web.config file.
Dim config As Configuration = WebConfigurationManager. _
OpenWebConfiguration("~")
' Get the connectionStrings section.
Dim section As ConnectionStringsSection = DirectCast( _
config.GetSection("connectionStrings"), _
ConnectionStringsSection)
' Toggle encryption.
If section.SectionInformation.IsProtected Then
section.SectionInformation.UnprotectSection()
Else
section.SectionInformation.ProtectSection( _
"DataProtectionConfigurationProvider")
End If
' Save changes to the Web.config file.
config.Save()
End Sub
Uygulamaları güvenli hale getirme hakkında daha ASP.NET için bkz. Web ASP.NET güvenliğini sağlama.