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

tarafından Scott Mitchell

PDF’yi İndir

ASP.NET uygulaması 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 birkaç kez güncelleştirdik Web.config . Örneğin, ilk öğreticide Yazılan Veri Kümesi oluşturulurken Northwind bağlantı dizesi bilgiler bölümüne otomatik olarak eklendi Web.config<connectionStrings>. Daha sonra, Ana Sayfalar ve Site Gezintisi öğreticisinde, projemizdeki tüm ASP.NET sayfalarının Temayı kullanması DataWebControls gerektiğini belirten bir <pages> öğe ekleyerek öğesini el ile güncelleştirdikWeb.config.

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 sayfa türü sunulmadı 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 http://www.YourServer.com/Web.config dosyanızın Web.config içeriğini görüntüleyemeyeceği anlamına gelir.

Tarayıcı aracılığıyla Web.config Ziyaret Etme, Bu tür bir sayfaya hizmet verilmedi İletisi Döndürüyor

Şekil 1: Tarayıcı Aracılığıyla Ziyaret Etme Web.config , Bu tür bir sayfaya hizmet verilmediğini döndürür İleti (Tam boyutlu görüntüyü görüntülemek 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çermez. Saldırgan, ASP.NET sayfalarınız tarafından kullanılan varsayılan Temanın adını biliyorsa ne gibi bir zarar verebilir?

Ancak bazı Web.config bölümler bağlantı dizeleri, kullanıcı adları, parolalar, sunucu adları, şifreleme anahtarları vb. içerebilecek 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 teknikleri inceleyeceğiz. Göreceğimiz gibi, .NET Framework sürüm 2.0, seçilen yapılandırma bölümlerini program aracılığıyla şifrelemeyi ve şifresini çözmeyi kolaylaştıran korumalı bir yapılandırma sistemi içerir.

Not

Bu öğretici, Microsoft'un bir ASP.NET uygulamasından veritabanına bağlanmaya yönelik önerileriyle 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 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ısı Uygulama .

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 olup olmadığı senaryolar için idealdir. Kullanıcı düzeyi anahtarlar, aynı sunucudaki diğer uygulamaların uygulamanızın korumalı yapılandırma bölümlerinin şifresini çözememesi gereken 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 Web.config bölümün <connectionStrings>Web.configçoğunu şifrelemek için kullanılabilse de bölümünde ş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 DataProtectionConfigurationProviderile kaydedilir. Yapılandırma bilgilerini şifrelerken veya şifresini çözerken, gerçek tür adı ( ve DPAPIProtectedConfigurationProvider) yerine uygun sağlayıcı adını (RsaProtectedConfigurationProviderRSAProtectedConfigurationProvider veya DataProtectionConfigurationProvider) sağlamamız gerekir. Dosyayı $WINDOWS$\Microsoft.NET\Framework\version\CONFIG klasörde bulabilirsinizmachine.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 uygun yapılandırma bölümüne program aracılığıyla başvurması, veya UnprotectSection yöntemini çağırması ProtectSection 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 şifreleyebilen ve ş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 korunduğunu göstermek için, içindeki bölümü Web.configşifrelemeye ve şifresini çözmeye <connectionStrings> yönelik düğmeler içeren bir ASP.NET sayfası oluşturalım.

Klasördeki AdvancedDAL sayfayı EncryptingConfigSections.aspx açarak başlayın. Bir TextBox denetimini Araç Kutusu'ndan Tasarım Aracı sürükleyin, özelliğini WebConfigContentsMultiLineTextModeWidth olarak, ve Rows özelliklerini sırasıyla %95 ve 15 olarak ayarlayın.ID Bu TextBox denetimi, içeriğinin Web.config şifrelenip şifrelenmediğini hızla görmemizi sağlayan içeriğini görüntüler. Elbette, gerçek bir uygulamada içeriğini Web.configgörüntülemek istemezsiniz.

TextBox'ın altına ve DecryptConnStringsadlı EncryptConnStrings 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 resmi görüntülemek için tıklayın)

Ardından, sayfa ilk yüklendiğinde TextBox içindekileri Web.configWebConfigContents yükleyen ve görüntüleyen 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.IsPostBackFalsebunu olay işleyicisinden Page_Load ç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

yöntemi, DisplayWebConfig uygulama Web.config dosyasını açmak için sınıfını, içeriğini bir dizede okumak için sınıfını ve dosyanın fiziksel yolunu oluşturmak için sınıfınıFileWeb.config kullanırPath.StreamReader 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 deyim eklemeniz veya alternatif olarak bu sınıf adlarının başına bir ön ek eklemeniz gerekir System.IO.

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ım Aracı, Düğmelerin her birine çift tıklayarak arka 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 sınıf OpenWebConfiguration yöntemi aracılığıyla WebConfigurationManager geçerli uygulama Web.config 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 ConfigurationSection nesnesi döndüren sınıf sGetSection(sectionName) yöntemi aracılığıyla Configuration 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 IsProtected özelliğini denetleyerek SectionInformation yapılandırma bölümünün şifrelenip şifrelenmediğini belirleyebiliriz. Ayrıca bölümü, özellik s ProtectSection(provider) ve UnprotectSection yöntemleri aracılığıyla SectionInformation ş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 ProtectSection(provider) kullanılması için yöntemine 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.

veya yöntemini çağırdıktan ProtectSection(provider) sonra, değişiklikleri kalıcı hale getirmek için nesnesinin Save yöntemini çağırmanız Configuration gerekir.UnprotectSection Yapılandırma bilgileri şifrelendikten veya şifresi çözüldükten ve değişiklikler kaydedildikten sonra, güncelleştirilmiş Web.config içeriği TextBox denetimine yüklemeye çağırırızDisplayWebConfig.

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 <connectionStrings> içeriğini Web.config listeleyen bir sayfa görmeniz gerekir (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 geri gönderilen işaretleme, istemciden WebConfigContents tehlikeli Request.Form olabilecek bir değer algılandı iletisini görüntüleyen bir HttpRequestValidationExceptionoluş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 sayfayı kapatmak için yönergesinde @Page ayarını olarak False ayarlayınValidateRequest. 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ğrulamayı 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ı Bölümü Şifreler <connectionString> (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Öğesindeki içeriğin bir bölümü kısa süre için kaldırılmış olsa da<CipherData>, bilgisayarımda oluşturulan şifrelenmiş <connectionStrings> bölüm şu şekildedir:

<connectionStrings 
    configProtectionProvider="DataProtectionConfigurationProvider">
  <EncryptedData>
    <CipherData>
      <CipherValue>AQAAANCMnd8BFdERjHoAwE/...zChw==</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 , yazdığımız kodla, SqlDataSource denetiminden veya Türü Yazılan DataSet'lerimizdeki 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, 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ü 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ı dizelerini düz metin olarak Web.config 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öründe çeşitli komut satırı araçları $WINDOWS$\Microsoft.NET\Framework\version\ bulunur. Ö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 deyim, komut satırı aracıyla bir 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_VB"
-prov "DataProtectionConfigurationProvider"

Benzer şekilde, aspnet_regiis.exe komut satırı aracı yapılandırma bölümlerinin şifresini çözmek için kullanılabilir. anahtarını kullanmak -pef yerine kullanın -pdf (veya yerine -pekullanı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 komutunu ç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, geliştirme makinenize özgü anahtarlar kullanılarak şifrelendiği için üretim sunucusu 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ının bu sınırlaması yoktur.

Veritabanı Kimlik Doğrulama Seçeneklerini Anlama

Herhangi bir uygulamanın Bir Microsoft SQL Server veritabanına , INSERT, UPDATEveya DELETE sorguları düzenleyebilmesi SELECTiçin önce veritabanının istekte bulunanı 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. ASP.NET bir uygulamayı Visual Studio 2005 s ASP.NET Geliştirme Sunucusu aracılığıyla ç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``\NETWORK SERVICEkimliğini domainName``\MachineName 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 parola içermez 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ğrulama 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ı 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ı dizesi katıştırılmış kimlik bilgilerine dikkat edin:

Server=serverName; Database=Northwind; uid=userID; pwd=password

Bir saldırganın uygulamanızın Web.config dosyasını görüntüleyebiliyor olduğunu 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 kullanarak SQL Management Studio aracılığıyla veya kendi web sitesindeki ASP.NET sayfalarından 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.

Not

SQL Server'de kullanılabilen farklı kimlik doğrulama 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 örnekler 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. Biri RSA algoritmasını, diğeri de Windows Veri Koruma API'sini (DPAPI) kullanan iki yerleşik korumalı yapılandırma sağlayıcısı vardır.

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üzeyi anahtarları kullanma veya bunun yerine RSA sağlayıcısını kullanma hakkında daha fazla bilgi için Daha Fazla Bilgi 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:

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ışmaktadır. Son kitabı Sams Teach Yourself ASP.NET 24 Hours 2.0'dır. Adresine adresinden veya adresinden ulaşabileceğiniz http://ScottOnWriting.NETblogu aracılığıyla ulaşabilirsinizmitchell@4GuysFromRolla.com.

Ö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 Arasında Teresa Murphy ve Randy Schmidt vardı. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana adresinden bir satır mitchell@4GuysFromRolla.combırakın.