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 Web.config
'yu birkaç kez güncelledik.
Northwind
Yazılan Veri Kümesi oluşturulurken, örneğin, bağlantı dizesi bilgileri Web.config
bölümüne otomatik olarak eklendi. 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ı dizeleri 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 Web.config
ziyaret edildiğinde bu tür bir sayfa sunulmuyor iletisini döndürüyor (Tam boyutlu görüntüyü görmek için tıklayın)
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ı dizeleri, 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.
Uyarı
Bu öğretici, Microsoft'un bir ASP.NET uygulamasından veritabanına bağlanma önerilerine göz atarak sona erer. Bağlantı dizelerinizi ş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 bkz Korumalı Yapılandırma Sağlayıcı Uygulaması.
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. Özellikle, <connectionStrings>
içindeki Web.config
bölümünü şifrelemeyi inceleyeceğiz, her ne kadar korumalı yapılandırma sistemi hemen her Web.config
bölümünü şifrelemek için kullanılabilse de. 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.
Uyarı
RSAProtectedConfigurationProvider
ve DPAPIProtectedConfigurationProvider
sağlayıcıları, machine.config
dosyasında 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. Kodun, kısa bir süre sonra göreceğimiz gibi, sadece uygun yapılandırma bölümüne programlı bir şekilde başvurması, ProtectSection
veya UnprotectSection
yöntemini çağırması ve ardından değişiklikleri kalıcı hale getirmek için Save
yöntemini çağırması gerekmektedir. 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.
Öncelikle EncryptingConfigSections.aspx
klasöründeki AdvancedDAL
sayfasını açarak başlayın. Araç Kutusu'ndan Tasarımcı'ya bir TextBox denetimi sürükleyin ve ID
özelliğini WebConfigContents
, TextMode
özelliğini MultiLine
, ayrıca Width
ve Rows
özelliklerini sırasıyla 95% ve 15 olarak ayarlayın. Bu TextBox denetimi, Web.config
'ün içeriğini görüntüleyerek içeriğin şifrelenip şifrelenmediğini hızlıca görmemizi sağlar. Tabii ki, gerçek bir uygulamada Web.config
içeriğini asla görüntülemek istemezsiniz.
TextBox'ın altına, EncryptConnStrings
ve DecryptConnStrings
adlarında 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, Web.config
içeriğini WebConfigContents
TextBox'ında yükleyip görüntüleyecek kodu yazmamız gerekiyor. Aşağıdaki kodu sayfanın arka planda kod sınıfına ekleyin. Bu kod, DisplayWebConfig
adlı bir yöntem ekler ve Page_Load
olduğunda, bunu Page.IsPostBack
olay işleyicisinden False
çağırır.
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
'On the first page visit, call DisplayWebConfig method
If Not Page.IsPostBack Then
DisplayWebConfig()
End If
End Sub
Private Sub DisplayWebConfig()
'Reads in the contents of Web.config and displays them in the TextBox
Dim webConfigStream As StreamReader = _
File.OpenText(Path.Combine(Request.PhysicalApplicationPath, "Web.config"))
Dim configContents As String = webConfigStream.ReadToEnd()
webConfigStream.Close()
WebConfigContents.Text = configContents
End Sub
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 Imports``System.IO
deyimi eklemeniz veya alternatif olarak bu sınıf adlarını System.IO.
ile öneklemeniz gerekir.
Ardından, iki Düğme denetimi Click
olayları için olay işleyicileri eklememiz ve DPAPI sağlayıcısıyla makine düzeyinde bir anahtar kullanarak <connectionStrings>
bölümünü şifrelemek ve şifresini çözmek için gerekli kodları 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 Sub EncryptConnStrings_Click(sender As Object, e As EventArgs) _
Handles EncryptConnStrings.Click
'Get configuration information about Web.config
Dim config As Configuration = _
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)
' Let's work with the <connectionStrings> section
Dim connectionStrings As ConfigurationSection = _
config.GetSection("connectionStrings")
If connectionStrings IsNot Nothing Then
' Only encrypt the section if it is not already protected
If Not connectionStrings.SectionInformation.IsProtected Then
' Encrypt the <connectionStrings> section using the
' DataProtectionConfigurationProvider provider
connectionStrings.SectionInformation.ProtectSection( _
"DataProtectionConfigurationProvider")
config.Save()
' Refresh the Web.config display
DisplayWebConfig()
End If
End If
End Sub
Protected Sub DecryptConnStrings_Click(sender As Object, e As EventArgs) _
Handles DecryptConnStrings.Click
' Get configuration information about Web.config
Dim config As Configuration = _
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)
' Let's work with the <connectionStrings> section
Dim connectionStrings As ConfigurationSection = _
config.GetSection("connectionStrings")
If connectionStrings IsNot Nothing Then
' Only decrypt the section if it is protected
If connectionStrings.SectionInformation.IsProtected Then
' Decrypt the <connectionStrings> section
connectionStrings.SectionInformation.UnprotectSection()
config.Save()
' Refresh the Web.config display
DisplayWebConfig()
End If
End If
End Sub
İki olay işleyicisinde kullanılan kod neredeyse aynıdır. Her ikisi de Web.config
, WebConfigurationManager
kullanarak 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, SectionInformation
özelliği ve ProtectSection(provider)
ile UnprotectSection
yöntemleri aracılığıyla ş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'un etkinlik işleyicisinde, DPAPI sağlayıcısının kullanılması için metoduna ProtectSection(provider)
DataProtectionConfigurationProvider'ı geçiriyoruz. 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 Configuration
nesnesinin Save
yöntemini çağırmanız gerekir. 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. İlk olarak, Web.config
bölümünün düz metin olarak görüntülendiği ve <connectionStrings>
içeriğini listeleyen bir sayfa görmelisiniz (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 WebConfigContents
geri gönderilen işaretleme, istemciden gelen potansiyel olarak tehlikeli bir HttpRequestValidationException
değeri 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 sayfa için kapatmak amacıyla, ValidateRequest
yönergesi içinde False
ayarını @Page
olarak ayarlayın. 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ıklanması, <connectionString>
bölümünü şifreler (Tam boyutlu görüntüyü görmek 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>
Uyarı
öğ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 UnprotectSection
yöntemi tarafından kullanılmaktadır.
Bağlantı dizesi bilgilerine , yazdığımız kodla, SqlDataSource denetiminden veya Typed DataSets'imizdeki TableAdapters'dan otomatik olarak oluşturulan koddan erişildiğinde Web.config
, ş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 şifresinin ASP.NET sayfası tarafından otomatik olarak çö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ü <connectionStrings>
düz metin gösterimine geri döndürmek için Bağlantı Dizelerinin Şifresini Çöz düğmesine tıklayın. Geri göndermede, bağlantı dizelerini 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 ifade, aspnet_regiis.exe
komut satırı aracı ile yapılandırma bölümünü şifrelemek için kullanılan genel söz dizimini göstermek üzere:
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_VB"
-prov "DataProtectionConfigurationProvider"
Benzer şekilde, aspnet_regiis.exe
komut satırı aracı yapılandırma bölümlerinin şifresini çözmek için kullanılabilir.
-pef
anahtarını kullanmak yerine, -pdf
kullanın (ya da -pe
yerine -pd
kullanın). 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
Uyarı
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 (IIS) üzerinde ASP.NET uygulamaları için, ASP.NET uygulamaları genellikle
domainName``\MachineName
veyadomainName``\NETWORK SERVICE
kimliğini 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 bağlantı dizesinde kullanıcı kimliği ve parola 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 bir kullanıcı adı ve paroladan arındırılı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ı dizesinde 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ı dizesini inceleyerek hangi kimlik doğrulama modunun kullanıldığını anlayabilirsiniz. Öğreticilerimizin bağlantı Web.config
dizesi şu şekildedir:
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ı dizelerinde 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. Bağlantı dizesine eklenmiş kimlik bilgilerine dikkat edin:
Server=serverName; Database=Northwind; uid=userID; pwd=password
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ı kullanıyorsanız, saldırgan bu bağlantı dizesini kullanarak SQL Management Studio aracılığıyla veya kendi web sitesindeki ASP.NET sayfalardan veritabanınıza bağlanabilir. 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.
Uyarı
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ı dizeleri, 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 Okuma
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
-
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 eğitim serisi, birçok yararlı kişi tarafından incelendi. Bu öğreticinin önde gelen 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.