Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Scott Mitchell
ASP.NET bir uygulama genellikle yapılandırma bilgilerini bir Web.config dosyasında depolar. Bu bilgilerin bazıları hassastır ve korumayı garanti eder. Varsayılan olarak bu dosya bir Web sitesi ziyaretçisine sunulmaz, ancak bir yönetici veya bilgisayar korsanı Web sunucusunun dosya sistemine erişim elde edebilir ve dosyanın içeriğini görüntüleyebilir. Bu öğreticide, ASP.NET 2.0'ın Web.config dosyasının bölümlerini şifreleyerek hassas bilgileri korumamıza olanak sağladığını öğreniriz.
Giriş
ASP.NET uygulamaları için yapılandırma bilgileri genellikle adlı Web.config
bir XML dosyasında depolanır. Bu öğreticiler boyunca birkaç kez güncelleştirdik Web.config
. İlk öğreticide Northwind
Yazılan Veri Kümesi oluşturulurken, örneğin, bağlantı dizesi bilgiler bölümüne otomatik olarak eklendi Web.config
<connectionStrings>
. Daha sonra, 'Ana Sayfalar ve Site Gezintisi' öğreticisi kapsamında, projemizdeki tüm ASP.NET sayfalarının Temasını kullanması gerektiğini belirten bir Web.config
öğesi ekleyerek <pages>
öğesini el ile güncelleştirdik.
Web.config
bağlantı dizesi gibi hassas veriler içerebileceğinden, içeriğinin Web.config
yetkisiz görüntüleyicilerden güvenli ve gizli tutulması önemlidir. Varsayılan olarak, uzantılı .config
bir dosyaya yapılan tüm HTTP istekleri, Şekil 1'de gösterilen Bu tür sayfaya hizmet verilmedi iletisini döndüren ASP.NET altyapısı tarafından işlenir. Bu, ziyaretçilerin yalnızca tarayıcılarının Adres çubuğuna girerek Web.config
dosyanızın http://www.YourServer.com/Web.config içeriğini görüntüleyemeyeceği anlamına gelir.
Şekil 1: Tarayıcı Aracılığıyla Ziyaret Edildiğinde Bu tür bir sayfaya hizmet verilmedi mesajı döner (Web.config
)
Peki ya bir saldırgan dosyanızın Web.config
içeriğini görüntülemesini sağlayan başka bir açık bulabilirse? Bir saldırgan bu bilgilerle ne yapabilir ve içindeki Web.config
hassas bilgileri daha fazla korumak için hangi adımlar atılabilir? Neyse ki içindeki bölümlerin Web.config
çoğu hassas bilgi içermiyor. Bir saldırgan, ASP.NET sayfalarınız tarafından kullanılan varsayılan Temanın adını biliyorsa ne tür bir zarar verebilir?
Ancak bazı Web.config
bölümler bağlantı dizesi, kullanıcı adları, parolalar, sunucu adları, şifreleme anahtarları vb. içerebilen hassas bilgiler içerir. Bu bilgiler genellikle aşağıdaki Web.config
bölümlerde bulunur:
<appSettings>
<connectionStrings>
<identity>
<sessionState>
Bu öğreticide, bu tür hassas yapılandırma bilgilerini korumaya yönelik tekniklere göz atacağız. Göreceğimiz gibi. .NET Framework sürüm 2.0, seçili yapılandırma bölümlerini program aracılığıyla şifrelemeyi ve şifresini çözmeyi kolay hale getiren korumalı bir yapılandırma sistemi içerir.
Not
Bu öğretici, Microsoft'un bir ASP.NET uygulamasından veritabanına bağlanma önerilerine göz atarak sona erer. bağlantı dizesi şifrelemeye ek olarak, veritabanına güvenli bir şekilde bağlandığınızdan emin olarak sisteminizi sağlamlaştırmaya yardımcı olabilirsiniz.
1. Adım: ASP.NET 2.0 s Korumalı Yapılandırma Seçeneklerini Keşfetme
ASP.NET 2.0, yapılandırma bilgilerini şifrelemek ve şifresini çözmek için korumalı bir yapılandırma sistemi içerir. Bu, .NET Framework'te yapılandırma bilgilerini program aracılığıyla şifrelemek veya şifresini çözmek için kullanılabilecek yöntemleri içerir. Korumalı yapılandırma sistemi, geliştiricilerin hangi şifreleme uygulamasının kullanılacağını seçmesine olanak tanıyan sağlayıcı modelini kullanır.
.NET Framework iki korumalı yapılandırma sağlayıcısıyla birlikte sağlanır:
-
RSAProtectedConfigurationProvider
- şifreleme ve şifre çözme için asimetrik RSA algoritmasını kullanır. -
DPAPIProtectedConfigurationProvider
- şifreleme ve şifre çözme için Windows Veri Koruma API'sini (DPAPI) kullanır.
Korumalı yapılandırma sistemi sağlayıcı tasarım desenini uyguladığından, kendi korumalı yapılandırma sağlayıcınızı oluşturup uygulamanıza takmak mümkündür. Bu işlem hakkında daha fazla bilgi için Korumalı Yapılandırma Sağlayıcısının Uygulanması bölümüne bakın.
RSA ve DPAPI sağlayıcıları şifreleme ve şifre çözme yordamları için anahtarları kullanır ve bu anahtarlar makine veya kullanıcı düzeyinde depolanabilir. Makine düzeyindeki anahtarlar, web uygulamasının kendi ayrılmış sunucusunda çalıştığı veya bir sunucuda şifrelenmiş bilgileri paylaşması gereken birden çok uygulama olduğu senaryolar için idealdir. Kullanıcı düzeyindeki anahtarlar, aynı sunucudaki diğer uygulamaların uygulamanızın korumalı yapılandırma bölümlerinin şifresini çözemediği paylaşılan barındırma ortamlarında daha güvenli bir seçenektir.
Bu öğreticide örneklerde DPAPI sağlayıcısı ve makine düzeyi anahtarları kullanılacaktır. Korumalı yapılandırma sistemi herhangi bir <connectionStrings>
bölümün Web.config
çoğunu şifrelemek için kullanılabilse de içindeki bölümü Web.config
şifrelemeyi inceleyeceğiz. Kullanıcı düzeyinde anahtarları kullanma veya RSA sağlayıcısını kullanma hakkında bilgi için bu öğreticinin sonundaki Diğer Okumalar bölümündeki kaynaklara bakın.
Not
RSAProtectedConfigurationProvider
ve DPAPIProtectedConfigurationProvider
sağlayıcıları, dosyaya machine.config
sırasıyla sağlayıcı adları RsaProtectedConfigurationProvider
ve DataProtectionConfigurationProvider
ile kaydedilir. Yapılandırma bilgilerini şifrelerken veya şifresini çözerken, gerçek tür adı ( ve RsaProtectedConfigurationProvider
) yerine uygun sağlayıcı adını (DataProtectionConfigurationProvider
RSAProtectedConfigurationProvider
veya DPAPIProtectedConfigurationProvider
) sağlamamız gerekir. Dosyayı machine.config
klasöründe bulabilirsiniz$WINDOWS$\Microsoft.NET\Framework\version\CONFIG
.
2. Adım: Yapılandırma Bölümlerini Program Aracılığıyla Şifreleme ve Şifresini Çözme
Birkaç kod satırıyla, belirli bir sağlayıcıyı kullanarak belirli bir yapılandırma bölümünü şifreleyebilir veya şifresini çözebiliriz. Kısa bir süre sonra göreceğimiz gibi kodun yalnızca uygun yapılandırma bölümüne program aracılığıyla başvurması, veya ProtectSection
yöntemini çağırması UnprotectSection
ve ardından değişiklikleri kalıcı hale getirmek için yöntemini çağırması Save
yeterlidir. Ayrıca , .NET Framework yapılandırma bilgilerini şifreleyip şifresini çözebilen yararlı bir komut satırı yardımcı programı içerir. 3. Adımda bu komut satırı yardımcı programını keşfedeceğiz.
Yapılandırma bilgilerinin program aracılığıyla korunmasını göstermek için, içindeki bölümü <connectionStrings>
şifrelemek ve şifresini çözmek Web.config
için düğmeler içeren bir ASP.NET sayfası oluşturalım.
Klasördeki EncryptingConfigSections.aspx
sayfayı AdvancedDAL
açarak başlayın. Bir TextBox denetimini Araç Kutusu'ndan Tasarımcı'ya sürükleyin, özelliğini ID
WebConfigContents
olarak, ve TextMode
MultiLine
Width
özelliklerini sırasıyla %95 ve 15 olarak ayarlayın.Rows
Bu TextBox denetimi, içeriğinin Web.config
şifrelenip şifrelenmediğini hızla görmemizi sağlayan içeriğini görüntüler. Tabii ki, gerçek bir uygulamada içeriğini Web.config
görüntülemek asla istemezsiniz.
TextBox'ın altına ve EncryptConnStrings
adlı DecryptConnStrings
iki Düğme denetimi ekleyin. Metin özelliklerini Bağlantı Dizelerini Şifrele ve Bağlantı Dizelerinin Şifresini Çöz olarak ayarlayın.
Bu noktada ekranınız Şekil 2'ye benzer görünmelidir.
Şekil 2: Sayfaya TextBox ve İki Düğmeli Web Denetimleri Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Ardından, sayfa ilk yüklendiğinde TextBox'ta Web.config
öğesini yükleyen ve görüntüleyen WebConfigContents
kod yazmamız gerekir. Aşağıdaki kodu sayfanın arka planda kod sınıfına ekleyin. Bu kod adlı DisplayWebConfig
bir yöntem ekler ve olduğunda Page_Load
Page.IsPostBack
bunu olay işleyicisinden false
çağırır:
protected void Page_Load(object sender, EventArgs e)
{
// On the first page visit, call DisplayWebConfig method
if (!Page.IsPostBack)
DisplayWebConfig();
}
private void DisplayWebConfig()
{
// Reads in the contents of Web.config and displays them in the TextBox
StreamReader webConfigStream =
File.OpenText(Path.Combine(Request.PhysicalApplicationPath, "Web.config"));
string configContents = webConfigStream.ReadToEnd();
webConfigStream.Close();
WebConfigContents.Text = configContents;
}
DisplayWebConfig
yöntemi, uygulama File
dosyasını açmak için , Web.config
içeriğini bir dizede okumak için StreamReader
ve dosyanın fiziksel yolunu oluşturmak için sınıfını kullanır. Bu üç sınıfın tümü ad alanında System.IO
bulunur. Sonuç olarak, arka planda kod sınıfının en üstüne bir using
System.IO
deyim eklemeniz veya alternatif olarak bu sınıf adlarını ile önek eklemeniz System.IO.
gerekir.
Ardından, iki Düğme denetimi Click
olayı için olay işleyicileri eklememiz ve DPAPI sağlayıcısıyla makine düzeyinde bir anahtar kullanarak bölümü şifrelemek ve şifresini çözmek <connectionStrings>
için gerekli kodu eklememiz gerekir. Tasarımcı'dan Düğmeler'in her birine çift tıklayarak arka planda kod sınıfına bir Click
olay işleyicisi ekleyin ve aşağıdaki kodu ekleyin:
protected void EncryptConnStrings_Click(object sender, EventArgs e)
{
// Get configuration information about Web.config
Configuration config =
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
// Let's work with the <connectionStrings> section
ConfigurationSection connectionStrings = config.GetSection("connectionStrings");
if (connectionStrings != null)
// Only encrypt the section if it is not already protected
if (!connectionStrings.SectionInformation.IsProtected)
{
// Encrypt the <connectionStrings> section using the
// DataProtectionConfigurationProvider provider
connectionStrings.SectionInformation.ProtectSection(
"DataProtectionConfigurationProvider");
config.Save();
// Refresh the Web.config display
DisplayWebConfig();
}
}
protected void DecryptConnStrings_Click(object sender, EventArgs e)
{
// Get configuration information about Web.config
Configuration config =
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
// Let's work with the <connectionStrings> section
ConfigurationSection connectionStrings =
config.GetSection("connectionStrings");
if (connectionStrings != null)
// Only decrypt the section if it is protected
if (connectionStrings.SectionInformation.IsProtected)
{
// Decrypt the <connectionStrings> section
connectionStrings.SectionInformation.UnprotectSection();
config.Save();
// Refresh the Web.config display
DisplayWebConfig();
}
}
İki olay işleyicisinde kullanılan kod neredeyse aynıdır. Her ikisi de Web.config
nın WebConfigurationManager
aracılığıyla geçerli uygulama dosyası hakkında bilgi alarak başlar. Bu yöntem, belirtilen sanal yol için web yapılandırma dosyasını döndürür. Ardından, Web.config
dosya s <connectionStrings>
bölümüne bir Configuration
nesne döndüren sınıf s aracılığıyla GetSection(sectionName)
erişilir.
nesnesi, ConfigurationSection
yapılandırma bölümüyle ilgili ek bilgiler ve işlevler sağlayan bir SectionInformation
özellik içerir. Yukarıdaki kodda gösterildiği gibi, özellik s SectionInformation
özelliğini denetleyerek IsProtected
yapılandırma bölümünün şifrelenip şifrelenmediğini belirleyebiliriz. Ayrıca bölüm, özellik s SectionInformation
ve ProtectSection(provider)
yöntemleri aracılığıyla UnprotectSection
şifrelenebilir veya şifresi çözülebilir.
yöntemi, ProtectSection(provider)
şifreleme sırasında kullanılacak korumalı yapılandırma sağlayıcısının adını belirten bir dize girişi olarak kabul eder.
EncryptConnString
Button s olay işleyicisinde, DPAPI sağlayıcısının kullanılması için yöntemine ProtectSection(provider)
DataProtectionConfigurationProvider geçiririz. yöntemi, UnprotectSection
yapılandırma bölümünü şifrelemek için kullanılan sağlayıcıyı belirleyebilir ve bu nedenle herhangi bir giriş parametresi gerektirmez.
ProtectSection(provider)
veya UnprotectSection
yöntemini çağırdıktan sonra, değişiklikleri kalıcı hale getirmek için nesnenin Configuration
çağırmanız gerekir.Save
Yapılandırma bilgileri şifrelendikten veya şifresi çözüldükten ve değişiklikler kaydedildikten sonra, güncelleştirilmiş DisplayWebConfig
içeriği TextBox denetimine yüklemeye çağırırızWeb.config
.
Yukarıdaki kodu girdikten sonra, tarayıcı üzerinden sayfayı EncryptingConfigSections.aspx
ziyaret ederek test edin. Başlangıçta, düz metin olarak görüntülenen bölümün içeriğini Web.config
<connectionStrings>
listeleyen bir sayfa görmeniz gerekir (bkz. Şekil 3).
Şekil 3: Sayfaya TextBox ve İki Düğmeli Web Denetimleri Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şimdi Bağlantı Dizelerini Şifrele düğmesine tıklayın. İstek doğrulaması etkinleştirilirse, TextBox'tan geri gönderilen işaretleme, istemciden WebConfigContents
tehlikeli HttpRequestValidationException
olabilecek bir değer algılandı iletisini görüntüleyen bir Request.Form
oluşturur. ASP.NET 2.0'da varsayılan olarak etkinleştirilen istek doğrulama, kodlanmamış HTML içeren geri göndermeleri yasaklar ve betik ekleme saldırılarını önlemeye yardımcı olmak için tasarlanmıştır. Bu denetim sayfa veya uygulama düzeyinde devre dışı bırakılabilir. Bu sayfada kapatmak için yönergesinde ValidateRequest
ayarını false
olarak ayarlayın@Page
. yönergesi @Page
, sayfanın bildirim temelli işaretlemesinin en üstünde bulunur.
<%@ Page ValidateRequest="False" ... %>
İstek doğrulaması, amacı, sayfa ve uygulama düzeyinde devre dışı bırakma ve HTML kodlama işaretlemesi hakkında daha fazla bilgi için bkz. İstek Doğrulama - Betik Saldırılarını Önleme.
Sayfa için istek doğrulamasını devre dışı bırakdıktan sonra Bağlantı Dizelerini Şifrele düğmesine yeniden tıklamayı deneyin. Geri göndermede, yapılandırma dosyasına erişilir ve <connectionStrings>
bölümü DPAPI sağlayıcısı kullanılarak şifrelenir. TextBox daha sonra yeni Web.config
içeriği görüntüleyecek şekilde güncelleştirilir. Şekil 4'de gösterildiği gibi bilgiler <connectionStrings>
artık şifrelenir.
Şekil 4: Bağlantı Dizelerini Şifrele Düğmesine tıklandığında, <connectionString>
bölümündeki bağlantı dizeleri şifrelenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bilgisayarımda oluşturulan şifrelenmiş <connectionStrings>
bölüm şu şekildedir; ancak öğedeki <CipherData>
içeriklerden bazıları kısa bir süre için kaldırılmıştır:
<connectionStrings
configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue></CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
Not
öğesi, <connectionStrings>
şifrelemeyi (DataProtectionConfigurationProvider
) gerçekleştirmek için kullanılan sağlayıcıyı belirtir. Bu bilgiler, Bağlantı Dizelerinin Şifresini Çöz düğmesine tıklandığında yöntemi tarafından UnprotectSection
kullanılır.
bağlantı dizesi bilgilerine Web.config
, yazdığımız kodla, SqlDataSource denetiminden veya Typed DataSets'imizdeki TableAdapters'dan otomatik olarak oluşturulan koddan erişildiğinde, şifresi otomatik olarak çözülür. Kısacası, şifrelenmiş <connectionString>
bölümün şifresini çözmek için ek kod veya mantık eklememiz gerekmez. Bunu göstermek için, şu anda Temel Raporlama bölümündeki~/BasicReporting/SimpleDisplay.aspx
Basit Görüntü öğreticisi () gibi önceki öğreticilerden birini ziyaret edin. Şekil 5'te gösterildiği gibi, öğretici tam olarak beklediğimiz gibi çalışır ve şifrelenmiş bağlantı dizesi bilgilerinin ASP.NET sayfası tarafından otomatik olarak şifrelerinin çözüldüğünü gösterir.
Şekil 5: Veri Erişim Katmanı Bağlantı Dizesi Bilgilerinin Şifresini Otomatik Olarak Çözer (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bölümü düz metin gösterimine geri döndürmek <connectionStrings>
için Bağlantı Dizelerinin Şifresini Çöz düğmesine tıklayın. Geri göndermede bağlantı dizesi Web.config
düz metin olarak görmeniz gerekir. Bu noktada, ekranınız bu sayfayı ilk ziyaret ettiğinizde olduğu gibi görünmelidir (Bkz. Şekil 3' te).
3. Adım: aspnet_regiis.exe Kullanarak Yapılandırma Bölümlerini Şifreleme
.NET Framework, klasörde çeşitli komut satırı araçları $WINDOWS$\Microsoft.NET\Framework\version\
içerir. Örneğin , SQL Önbellek Bağımlılıklarını Kullanma öğreticisinde, SQL önbellek bağımlılıkları için gerekli altyapıyı eklemek için komut satırı aracını kullanmayı aspnet_regsql.exe
inceledik. Bu klasördeki bir diğer yararlı komut satırı aracı da ASP.NET IIS Kayıt aracıdır (aspnet_regiis.exe
). Adından da anlaşılacağı gibi, ASP.NET IIS Kayıt aracı öncelikli olarak bir ASP.NET 2.0 uygulamasını Microsoft'un profesyonel düzeydeki Web sunucusu IIS'ye kaydetmek için kullanılır. IIS ile ilgili özelliklerine ek olarak, ASP.NET IIS Kayıt aracı içinde Web.config
belirtilen yapılandırma bölümlerini şifrelemek veya şifresini çözmek için de kullanılabilir.
Aşağıdaki deyim, komut satırı aracıyla yapılandırma bölümünü şifrelemek için kullanılan genel söz dizimini aspnet_regiis.exe
gösterir:
aspnet_regiis.exe -pef section physical_directory -prov provider
bölümü şifrelemek için yapılandırma bölümüdür (connectionStrings gibi), physical_directory web uygulamasının kök dizininin tam, fiziksel yoludur ve sağlayıcı kullanılacak korumalı yapılandırma sağlayıcısının adıdır (DataProtectionConfigurationProvider gibi). Alternatif olarak, web uygulaması IIS'de kayıtlıysa, aşağıdaki söz dizimini kullanarak fiziksel yol yerine sanal yolu girebilirsiniz:
aspnet_regiis.exe -pe section -app virtual_directory -prov provider
Aşağıdaki aspnet_regiis.exe
örnek, DPAPI sağlayıcısını kullanarak bölümü makine düzeyinde bir anahtarla şifreler <connectionStrings>
:
aspnet_regiis.exe -pef
"connectionStrings" "C:\Websites\ASPNET_Data_Tutorial_73_CS"
-prov "DataProtectionConfigurationProvider"
Benzer şekilde, aspnet_regiis.exe
komut satırı aracı yapılandırma bölümlerinin şifresini çözmek için kullanılabilir. anahtarı kullanmak -pef
yerine kullanın -pdf
(veya yerine -pe
kullanın -pd
). Ayrıca, şifre çözme sırasında sağlayıcı adının gerekli olmadığını unutmayın.
aspnet_regiis.exe -pdf section physical_directory
-- or --
aspnet_regiis.exe -pd section -app virtual_directory
Not
Bilgisayara özgü anahtarları kullanan DPAPI sağlayıcısını kullandığımızdan, web sayfalarının sunulduğu makineden çalıştırmanız aspnet_regiis.exe
gerekir. Örneğin, bu komut satırı programını yerel geliştirme makinenizden çalıştırır ve ardından şifrelenmiş Web.config dosyasını üretim sunucusuna yüklerseniz, üretim sunucusu geliştirme makinenize özgü anahtarlar kullanılarak şifrelendiği için bağlantı dizesi bilgilerinin şifresini çözemez. RSA anahtarlarını başka bir makineye dışarı aktarmak mümkün olduğundan RSA sağlayıcısı bu sınırlamaya sahip değildir.
Veritabanı Kimlik Doğrulama Seçeneklerini Anlama
Herhangi bir uygulamanın bir Microsoft SQL Server veritabanına , SELECT
, INSERT
veya UPDATE
sorguları verebilmesi DELETE
için önce veritabanının istek sahibini tanımlaması gerekir. Bu işlem kimlik doğrulaması olarak bilinir ve SQL Server iki kimlik doğrulama yöntemi sağlar:
-
Windows Kimlik Doğrulaması - uygulamanın çalıştığı işlem veritabanıyla iletişim kurmak için kullanılır. Visual Studio 2005 s ASP.NET Geliştirme Sunucusu aracılığıyla bir ASP.NET uygulaması çalıştırırken, ASP.NET uygulama şu anda oturum açmış olan kullanıcının kimliğini varsayar. Microsoft Internet Information Server'da (IIS) ASP.NET uygulamalar için, ASP.NET uygulamalar genellikle veya
domainName``\MachineName
kimliğinidomainName``\NETWORK SERVICE
varsayar, ancak bu özelleştirilebilir. - SQL Kimlik Doğrulaması - Kimlik doğrulaması için kimlik bilgileri olarak bir kullanıcı kimliği ve parola değerleri sağlanır. SQL kimlik doğrulaması ile kullanıcı kimliği ve parola bağlantı dizesi sağlanır.
Windows kimlik doğrulaması daha güvenli olduğundan SQL kimlik doğrulaması yerine tercih edilir. Windows kimlik doğrulaması ile bağlantı dizesi kullanıcı adı ve paroladan bağımsızdır ve web sunucusu ve veritabanı sunucusu iki farklı makinede bulunuyorsa, kimlik bilgileri ağ üzerinden düz metin olarak gönderilmez. Ancak SQL kimlik doğrulaması ile kimlik doğrulaması kimlik bilgileri bağlantı dizesi sabit kodlanır ve web sunucusundan veritabanı sunucusuna düz metin olarak iletilir.
Bu öğreticilerde Windows kimlik doğrulaması kullanılmıştır. bağlantı dizesi inceleyerek hangi kimlik doğrulama modunun kullanıldığını anlayabilirsiniz. Öğreticilerimizin içindeki Web.config
bağlantı dizesi:
Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\NORTHWND.MDF; Integrated Security=True; User Instance=True
Integrated Security=True ve kullanıcı adı ve parola eksikliği, Windows kimlik doğrulamasının kullanıldığını gösterir. Bazı bağlantı dizesi, Tümleşik Güvenlik=True yerine Güvenilen Bağlantı=Evet veya Tümleşik Güvenlik=SSPI terimi kullanılır, ancak üçü de Windows kimlik doğrulamasının kullanıldığını gösterir.
Aşağıdaki örnekte SQL kimlik doğrulaması kullanan bir bağlantı dizesi gösterilmektedir.
$CREDENTIAL_PLACEHOLDER$
, parola anahtar-değer çifti için bir yer tutucudur. Kimlik bilgilerinin bağlantı dizesi ekli olduğunu unutmayın:
Server=serverName; Database=Northwind; uid=userID; $CREDENTIAL_PLACEHOLDER$
Bir saldırganın uygulamanızın dosyasını görüntüleyebilmesini Web.config
düşünün. İnternet üzerinden erişilebilen bir veritabanına bağlanmak için SQL kimlik doğrulamasını kullanırsanız, saldırgan bu bağlantı dizesi SQL Management Studio aracılığıyla veya kendi web sitesindeki ASP.NET sayfalarından veritabanınıza bağlanmak için kullanabilir. Bu tehdidin azaltılmasına yardımcı olmak için, korumalı yapılandırma sistemini kullanarak içindeki Web.config
bağlantı dizesi bilgilerini şifreleyin.
Not
SQL Server'da kullanılabilen farklı kimlik doğrulaması türleri hakkında daha fazla bilgi için bkz. Güvenli ASP.NET Uygulamaları Oluşturma: Kimlik Doğrulaması, Yetkilendirme ve Güvenli İletişim. Windows ve SQL kimlik doğrulaması söz dizimi arasındaki farkları gösteren diğer bağlantı dizesi örnekleri için ConnectionStrings.com bakın.
Özet
Varsayılan olarak, bir ASP.NET uygulamasında uzantılı .config
dosyalara tarayıcı üzerinden erişilemez. Bu tür dosyalar, veritabanı bağlantı dizesi, kullanıcı adları ve parolalar gibi hassas bilgiler içerebileceğinden döndürülmez. .NET 2.0'daki korumalı yapılandırma sistemi, belirtilen yapılandırma bölümlerinin şifrelenmesine izin vererek hassas bilgilerin daha fazla korunmasına yardımcı olur. İki yerleşik korumalı yapılandırma sağlayıcısı vardır: biri RSA algoritmasını, diğeri de Windows Veri Koruma API'sini (DPAPI) kullanan.
Bu öğreticide, DPAPI sağlayıcısını kullanarak yapılandırma ayarlarını şifrelemeyi ve şifresini çözmeyi inceledik. Bu, 2. Adımda gördüğümüz gibi hem program aracılığıyla hem de 3. Adımda ele alınan komut satırı aracı aracılığıyla aspnet_regiis.exe
gerçekleştirilebilir. Kullanıcı düzeyinde anahtarları kullanma veya bunun yerine RSA sağlayıcısını kullanma hakkında daha fazla bilgi için Daha Fazla Okuma bölümündeki kaynaklara bakın.
Mutlu Programlama!
Daha Fazla Bilgi
Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
- Güvenli ASP.NET Uygulaması Oluşturma: Kimlik Doğrulaması, Yetkilendirme ve Güvenli İletişim
- ASP.NET 2.0 Uygulamalarında Yapılandırma Bilgilerini Şifreleme
-
Web.config
ASP.NET 2.0'da Değerleri Şifreleme - Nasıl Yapılır: DPAPI Kullanarak ASP.NET 2.0'da Yapılandırma Bölümlerini Şifreleme
- Nasıl Yapılır: RSA Kullanarak ASP.NET 2.0'da Yapılandırma Bölümlerini Şifreleme
- .NET 2.0'da Yapılandırma API'si
- Windows Veri Koruması
Yazar hakkında
Yedi ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışır. Son kitabı Sams Teach Yourself ASP.NET 24 Hours 2.0'dır. Ona adresinden mitchell@4GuysFromRolla.comulaşabilirsiniz.
Özel Teşekkürler
Bu öğretici serisi birçok yararlı gözden geçiren tarafından gözden geçirildi. Bu öğreticinin baş gözden geçirenleri Teresa Murphy ve Randy Schmidt'tir. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, mitchell@4GuysFromRolla.com'a bir mesaj bırakın.