Aracılığıyla paylaş


Bağlantı Dizelerini ve Diğer Yapılandırma Bilgilerini Koruma (VB)

tarafından Scott Mitchell

PDF'i indirin

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.configbir 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.

Tarayıcı aracılığıyla Web.config'ı ziyaret etmek, 'Bu tür bir sayfa sunulmuyor' mesajını döndürüyor

Ş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.confighassas 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:

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ı (DataProtectionConfigurationProviderRSAProtectedConfigurationProvider 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.

Yeni bir TextBox ve iki Düğme denetimi içeren EncryptingConfigSections.aspx sayfasına açılan Visual Studio'yu gösteren ekran görüntüsü.

Ş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.IObulunur. 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).

Web tarayıcısında yüklenen EncryptingConfigSections.aspx sayfasını gösteren ekran görüntüsü.

Ş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.

Bağlantı Dizelerini Şifrele Düğmesine tıklanması connectionString< Bölümünü şifreler >

Ş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.

Veri Erişim Katmanı Bağlantı Dizesi Bilgilerinin Şifresini Otomatik Olarak Çözer

Ş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.configbelirtilen 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, INSERTveya UPDATE sorguları verebilmesi DELETEiç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 veya domainName``\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:

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.