Bağlantı Dizelerini ve Diğer Yapılandırma Bilgilerini Koruma (VB)Protecting Connection Strings and Other Configuration Information (VB)

Scott Mitchell tarafındanby Scott Mitchell

Kodu indirin veya PDF 'yi indirinDownload Code or Download PDF

Bir ASP.NET uygulaması genellikle yapılandırma bilgilerini bir Web. config dosyasında depolar.An ASP.NET application typically stores configuration information in a Web.config file. Bu bilgilerden bazıları hassas ve belirli bir koruma.Some of this information is sensitive and warrants protection. Varsayılan olarak, bu dosya bir Web sitesi ziyaretçisine sunulmayacak, ancak bir yönetici veya korsan Web sunucusunun dosya sistemine erişim elde edebilir ve dosyanın içeriğini görüntüleyebilir.By default this file will not be served to a Web site visitor, but an administrator or a hacker may gain access to the Web server's file system and view the contents of the file. Bu öğreticide, ASP.NET 2,0 ' nin, Web. config dosyasının bölümlerini şifreleyerek hassas bilgileri korumamıza izin verdiğini öğreniyoruz.In this tutorial we learn that ASP.NET 2.0 allows us to protect sensitive information by encrypting sections of the Web.config file.

GirişIntroduction

ASP.NET uygulamaları için yapılandırma bilgileri genellikle Web.configadlı bir XML dosyasında depolanır.Configuration information for ASP.NET applications is commonly stored in an XML file named Web.config. Bu öğreticilerin kursunda Web.config çok kez güncelleştirdik.Over the course of these tutorials we have updated the Web.config a handful of times. İlk öğreticideNorthwind türü belirtilmiş veri kümesini oluştururken, örneğin, bağlantı dizesi bilgileri <connectionStrings> bölümünde Web.config otomatik olarak eklenmiştir.When creating the Northwind Typed DataSet in the first tutorial, for example, connection string information was automatically added to Web.config in the <connectionStrings> section. Daha sonra, ana sayfalarda ve site gezinti öğreticisinde Web.configel ile güncelleştirdik, bu, projemizdeki tüm ASP.NET sayfalarının DataWebControls temasını kullanması gerektiğini belirten bir <pages> öğesi ekliyor.Later, in the Master Pages and Site Navigation tutorial, we manually updated Web.config, adding a <pages> element indicating that all of the ASP.NET pages in our project should use the DataWebControls Theme.

Web.config bağlantı dizeleri gibi hassas veriler içerebildiği için, Web.config içeriğinin güvenli tutulması ve yetkisiz görüntüleyicilerden gizlenmesi önemlidir.Since Web.config may contain sensitive data such as connection strings, it is important that the contents of Web.config be kept safe and hidden from unauthorized viewers. Varsayılan olarak, .config uzantılı bir dosyaya yapılan HTTP istekleri, Şekil 1 ' de gösterilen Bu sayfa türünü döndüren ASP.NET altyapısı tarafından işlenir.By default, any HTTP request to a file with the .config extension is handled by the ASP.NET engine, which returns the This type of page is not served message shown in Figure 1. Bu, ziyaretçilerin Web.config dosya içeriğinizi yalnızca tarayıcının adres çubuğuna http://www.YourServer.com/Web.config girerek görüntüleyemeyeceği anlamına gelir.This means that visitors cannot view your Web.config file s contents by simply entering http://www.YourServer.com/Web.config into their browser s Address bar.

Web. config dosyasını bir tarayıcı aracılığıyla ziyaret , bu tür bir sayfada sunulmayan bir Ileti döndürürVisiting Web.config Through a Browser Returns a This type of page is not served Message

Şekil 1: tarayıcı aracılığıyla Web.config ziyaret etmek, bu tür bir sayfada sunulmayan bir ileti döndürüyor (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 1: Visiting Web.config Through a Browser Returns a This type of page is not served Message (Click to view full-size image)

Ancak bir saldırgan, Web.config dosya içeriklerini görüntülemesine izin veren başka bir yararlanma işlemi de bulabiliyor mu?But what if an attacker is able to find some other exploit that allows her to view your Web.config file s contents? Bu bilgilerle bir saldırgan ne yapabilir ve Web.configiçindeki hassas bilgileri korumak için hangi adımlar alınabilir?What could an attacker do with this information, and what steps can be taken to further protect the sensitive information within Web.config? Neyse ki Web.config çoğu bölüm hassas bilgiler içermez.Fortunately, most sections in Web.config do not contain sensitive information. ASP.NET sayfalarınız tarafından kullanılan varsayılan temanın adını bildiklerinde saldırganlar ne kadar zararlı olabilir?What harm can an attacker perpetrate if they know the name of the default Theme used by your ASP.NET pages?

Ancak, bazı Web.config bölümler, bağlantı dizeleri, Kullanıcı adları, parolalar, sunucu adları, şifreleme anahtarları ve benzeri olabilecek gizli bilgiler içerir.Certain Web.config sections, however, contain sensitive information that may include connection strings, user names, passwords, server names, encryption keys, and so forth. Bu bilgiler genellikle aşağıdaki Web.config bölümlerinde bulunur:This information is typically found in the following Web.config sections:

  • <appSettings>
  • <connectionStrings>
  • <identity>
  • <sessionState>

Bu öğreticide, bu tür hassas yapılandırma bilgilerini koruma tekniklerini inceleyeceğiz.In this tutorial we will look at techniques for protecting such sensitive configuration information. .NET Framework sürüm 2,0, seçilen yapılandırma bölümlerinin bir Breeze olarak şifrelenmesini ve şifresini çözmesini sağlayan bir korumalı yapılandırmalar sistemi içerir.As we will see, the .NET Framework version 2.0 includes a protected configurations system that makes programmatically encrypting and decrypting selected configuration sections a breeze.

Note

Bu öğretici, bir ASP.NET uygulamasından bir veritabanına bağlanmak için Microsoft s önerilerine göz atın.This tutorial concludes with a look at Microsoft s recommendations for connecting to a database from an ASP.NET application. Bağlantı dizelerinizi şifrelemeye ek olarak, veritabanına güvenli bir biçimde bağlanmanızı sağlayarak sisteminizin sağlamlaştırılmasına yardımcı olabilirsiniz.In addition to encrypting your connection strings, you can help harden your system by ensuring that you are connecting to the database in a secure fashion.

1. Adım: ASP.NET 2,0 s korumalı yapılandırma seçeneklerini keşfetmeStep 1: Exploring ASP.NET 2.0 s Protected Configuration Options

ASP.NET 2,0, yapılandırma bilgilerini şifrelemek ve şifrelerini çözmek için korunan bir yapılandırma sistemi içerir.ASP.NET 2.0 includes a protected configuration system for encrypting and decrypting configuration information. Bu, yapılandırma bilgilerini programlı bir şekilde şifrelemek veya şifrelerini çözmek için kullanılabilen .NET Framework yöntemleri içerir.This includes methods in the .NET Framework that can be used to programmatically encrypt or decrypt configuration information. Korunan yapılandırma sistemi, geliştiricilerin hangi şifreleme uygulamalarının kullanıldığını seçmesini sağlayan sağlayıcı modelinikullanır.The protected configuration system uses the provider model, which allows developers to choose what cryptographic implementation is used.

.NET Framework, iki korumalı yapılandırma sağlayıcısıyla birlikte gelir:The .NET Framework ships with two protected configuration providers:

Korunan yapılandırma sistemi sağlayıcı tasarım modelini gerçekleştirdiğinden, kendi korumalı yapılandırma sağlayıcınızı oluşturup uygulamanıza takabilirsiniz.Since the protected configuration system implements the provider design pattern, it is possible to create your own protected configuration provider and plug it into your application. Bu işlem hakkında daha fazla bilgi için bkz. korumalı yapılandırma sağlayıcısı uygulama .See Implementing a Protected Configuration Provider for more information on this process.

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.The RSA and DPAPI providers use keys for their encryption and decryption routines, and these keys can be stored at the machine- or user-level. Makine düzeyi anahtarlar, Web uygulamasının kendi adanmış sunucusunda çalıştığı senaryolar için veya şifreli bilgileri paylaşması gereken bir sunucuda birden çok uygulama varsa idealdir.Machine-level keys are ideal for scenarios where the web application runs on its own dedicated server or if there are multiple applications on a server that need to share encrypted information. Kullanıcı düzeyi anahtarlar, paylaşılan barındırma ortamlarında, aynı sunucudaki diğer uygulamaların uygulama korumalı yapılandırma bölümlerinin şifresini çözemediğinden daha güvenli bir seçenektir.User-level keys are a more secure option in shared hosting environments where other applications on the same server should not be able to decrypt your application s protected configuration sections.

Bu öğreticide, örneklerimizde DPAPI sağlayıcısı ve makine düzeyindeki anahtarlar kullanılacaktır.In this tutorial our examples will use the DPAPI provider and machine-level keys. Özellikle, korunan yapılandırma sistemi herhangi bir Web.config bölümünü şifrelemek için kullanılabilir olsa da, Web.config``<connectionStrings> bölümünü şifrelemeyi inceleyeceğiz.Specifically, we will look at encrypting the <connectionStrings> section in Web.config, although the protected configuration system can be used to encrypt most any Web.config section. Kullanıcı düzeyi anahtarları kullanma veya RSA sağlayıcısını kullanma hakkında bilgi için, Bu öğreticinin sonundaki diğer okumalar bölümünde yer alan kaynaklara bakın.For information on using user-level keys or using the RSA provider, consult the resources in the Further Readings section at the end of this tutorial.

Note

RSAProtectedConfigurationProvider ve DPAPIProtectedConfigurationProvider sağlayıcılar machine.config dosyasında, sırasıyla sağlayıcı adları RsaProtectedConfigurationProvider ve DataProtectionConfigurationProviderile kaydedilir.The RSAProtectedConfigurationProvider and DPAPIProtectedConfigurationProvider providers are registered in the machine.config file with the provider names RsaProtectedConfigurationProvider and DataProtectionConfigurationProvider, respectively. Yapılandırma bilgilerini şifrelerken veya şifresini çözerken gerçek tür adı (RSAProtectedConfigurationProvider ve DPAPIProtectedConfigurationProvider) yerine uygun sağlayıcı adını (RsaProtectedConfigurationProvider veya DataProtectionConfigurationProvider) sağlamaları gerekir.When encrypting or decrypting configuration information we will need to supply the appropriate provider name (RsaProtectedConfigurationProvider or DataProtectionConfigurationProvider) rather than the actual type name (RSAProtectedConfigurationProvider and DPAPIProtectedConfigurationProvider). machine.config dosyasını $WINDOWS$\Microsoft.NET\Framework\version\CONFIG klasöründe bulabilirsiniz.You can find the machine.config file in the $WINDOWS$\Microsoft.NET\Framework\version\CONFIG folder.

2. Adım: program aracılığıyla yapılandırma bölümlerinin şifresini çözme ve şifrelerini çözmeStep 2: Programmatically Encrypting and Decrypting Configuration Sections

Belirli bir sağlayıcıyı kullanarak belirli bir yapılandırma bölümünü şifreleyebilir veya şifrelerini çözebiliriz.With a few lines of code we can encrypt or decrypt a particular configuration section using a specified provider. Kod, kısa süre içinde, uygun yapılandırma bölümüne programlı bir şekilde başvurulması, ProtectSection veya UnprotectSection metodunu çağırmanız ve sonra değişiklikleri kalıcı hale getirmek için Save metodunu çağırmaktır.The code, as we will see shortly, simply needs to programmatically reference the appropriate configuration section, call its ProtectSection or UnprotectSection method, and then call the Save method to persist the changes. Ayrıca .NET Framework, yapılandırma bilgilerini şifreleyebilmeyen ve şifresini çözebilecekler yararlı bir komut satırı yardımcı programı içerir.Moreover, the .NET Framework includes a helpful command line utility that can encrypt and decrypt configuration information. Bu komut satırı yardımcı programını adım 3 ' te keşfedecektir.We will explore this command line utility in Step 3.

Yapılandırma bilgilerini programlı bir şekilde korumayı göstermek için, s Web.config``<connectionStrings> bölümünü şifrelemek ve şifrelerini çözmek için düğmeler içeren bir ASP.NET sayfası oluşturalım.To illustrate programmatically protecting configuration information, let s create an ASP.NET page that includes buttons for encrypting and decrypting the <connectionStrings> section in Web.config.

AdvancedDAL klasöründeki EncryptingConfigSections.aspx sayfasını açarak başlayın.Start by opening the EncryptingConfigSections.aspx page in the AdvancedDAL folder. Araç kutusundan Tasarımcı üzerine bir TextBox denetimi sürükleyip ID özelliğini WebConfigContents, TextMode özelliğini MultiLineve Width ve Rows özelliklerini sırasıyla %95 ve 15 olarak ayarlayarak.Drag a TextBox control from the Toolbox onto the Designer, setting its ID property to WebConfigContents, its TextMode property to MultiLine, and its Width and Rows properties to 95% and 15, respectively. Bu TextBox denetimi, içeriğin şifrelenip şifrelenmediğini hızlı bir şekilde görmemize izin veren Web.config içeriğini görüntüler.This TextBox control will display the contents of Web.config allowing us to quickly see if the contents are encrypted or not. Kuşkusuz, gerçek bir uygulamada Web.configiçeriğini göstermek istemezsiniz.Of course, in a real application you would never want to display the contents of Web.config.

Metin kutusunun altına EncryptConnStrings ve DecryptConnStringsadlı iki düğme denetimi ekleyin.Beneath the TextBox, add two Button controls named EncryptConnStrings and DecryptConnStrings. Bağlantı dizelerini şifrelemek ve bağlantı dizelerinin şifresini çözmek için metin özelliklerini ayarlayın.Set their Text properties to Encrypt Connection Strings and Decrypt Connection Strings .

Bu noktada, ekranınızda Şekil 2 ' ye benzer görünmelidir.At this point your screen should look similar to Figure 2.

Sayfaya bir TextBox ve Iki düğme web denetimi eklemek Add a TextBox and Two Button Web Controls to the Page

Şekil 2: sayfaya metin kutusu ve Iki düğme web denetimi ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 2: Add a TextBox and Two Button Web Controls to the Page (Click to view full-size image)

Daha sonra, sayfa ilk yüklendiğinde WebConfigContents metin kutusuna Web.config içeriğini yükleyen ve görüntüleyen bir kod yazdık.Next, we need to write code that loads and displays the contents of Web.config in the WebConfigContents TextBox when the page is first loaded. Aşağıdaki kodu Page s arka plan kod sınıfına ekleyin.Add the following code to the page s code-behind class. Bu kod, DisplayWebConfig adlı bir yöntemi ekler ve Page.IsPostBack Falseolduğunda Page_Load olay işleyicisinden çağırır:This code adds a method named DisplayWebConfig and calls it from the Page_Load event handler when Page.IsPostBack is False:

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 s Web.config dosyasını açmak için File sınıfını , içeriğini bir dizeye okumak için StreamReader sınıfını vePath dosyası fiziksel yolunu oluşturmak için Web.config sınıfını kullanır.The DisplayWebConfig method uses the File class to open the application s Web.config file, the StreamReader class to read its contents into a string, and the Path class to generate the physical path to the Web.config file. Bu üç sınıfın hepsi System.IO ad alanındabulunur.These three classes are all found in the System.IO namespace. Sonuç olarak, arka plan kod sınıfının üst kısmına bir Imports``System.IO deyim eklemeniz ya da alternatif olarak, bu sınıf adlarını System.IO. önekiyle birlikte uygulamanız gerekecektirConsequently, you will need to add a Imports``System.IO statement to the top of the code-behind class or, alternatively, prefix these class names with System.IO.

Daha sonra, iki düğme denetimine Click olay işleyicileri eklememiz ve DPAPI sağlayıcısı ile makine düzeyindeki bir anahtar kullanarak <connectionStrings> bölümünü şifrelemek ve şifresini çözmek için gerekli kodu eklemeniz gerekir.Next, we need to add event handlers for the two Button controls Click events and add the necessary code to encrypt and decrypt the <connectionStrings> section using a machine-level key with the DPAPI provider. Tasarımcıdan, arka plan kod sınıfında Click olay işleyicisi eklemek için düğmelerin her birine çift tıklayın ve ardından aşağıdaki kodu ekleyin:From the Designer, double-click each of the Buttons to add a Click event handler in the code-behind class and then add the following code:

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şleyicilerinde kullanılan kod neredeyse aynıdır.The code used in the two event handlers is nearly identical. Her ikisi de, WebConfigurationManager sınıf s OpenWebConfiguration yöntemiaracılığıyla geçerli uygulama s Web.config dosyası hakkında bilgi almaya başlar.They both start by getting information about the current application s Web.config file via the WebConfigurationManager class s OpenWebConfiguration method. Bu yöntem, belirtilen sanal yol için Web yapılandırma dosyasını döndürür.This method returns the web configuration file for the specified virtual path. Sonra, Web.config File s <connectionStrings> bölümüne, ConfigurationSection nesnesi döndüren Configuration Class s GetSection(sectionName) yöntemiaracılığıyla erişilir.Next, the Web.config file s <connectionStrings> section is accessed via the Configuration class s GetSection(sectionName) method, which returns a ConfigurationSection object.

ConfigurationSection nesnesi, yapılandırma bölümüyle ilgili ek bilgi ve işlevsellik sağlayan bir SectionInformation özelliği içerir.The ConfigurationSection object includes a SectionInformation property that provides additional information and functionality regarding the configuration section. Yukarıdaki kodda gösterildiği gibi, yapılandırma bölümünün SectionInformation özellik s IsProtected özelliğini denetleyerek şifrelenip şifrelenmeyeceğini belirleyebiliriz.As the code above shows, we can determine whether the configuration section is encrypted by checking the SectionInformation property s IsProtected property. Üstelik, Bölüm SectionInformation özellik s ProtectSection(provider) ve UnprotectSection yöntemleri aracılığıyla şifrelenebilir veya şifresi çözülür.Moreover, the section can be encrypted or decrypted via the SectionInformation property s ProtectSection(provider) and UnprotectSection methods.

ProtectSection(provider) yöntemi, şifreleme sırasında kullanılacak korumalı yapılandırma sağlayıcısının adını belirten bir dize girişi kabul eder.The ProtectSection(provider) method accepts as input a string specifying the name of the protected configuration provider to use when encrypting. EncryptConnString Button s olay işleyicisinde, DPAPI sağlayıcısının kullanılması için DataProtectionConfigurationProvider 'ı ProtectSection(provider) yöntemine geçirdik.In the EncryptConnString Button s event handler we pass DataProtectionConfigurationProvider into the ProtectSection(provider) method so that the DPAPI provider is used. UnprotectSection yöntemi, 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.The UnprotectSection method can determine the provider that was used to encrypt the configuration section and therefore does not require any input parameters.

ProtectSection(provider) veya UnprotectSection yöntemini çağırdıktan sonra, değişiklikleri kalıcı hale getirmek için Configuration nesne s Save yöntemini çağırmanız gerekir.After calling the ProtectSection(provider) or UnprotectSection method, you must call the Configuration object s Save method to persist the changes. Yapılandırma bilgileri şifrelendikten veya şifresi çözüldükten ve değişiklikler kaydedildikten sonra, güncelleştirilmiş Web.config içeriğini TextBox denetimine yüklemek için DisplayWebConfig çağırdık.Once the configuration information has been encrypted or decrypted and the changes saved, we call DisplayWebConfig to load the updated Web.config contents into the TextBox control.

Yukarıdaki kodu girdikten sonra, EncryptingConfigSections.aspx sayfasını bir tarayıcıda ziyaret ederek test edin.Once you have entered the above code, test it by visiting the EncryptingConfigSections.aspx page through a browser. Başlangıçta düz metin olarak görüntülenen <connectionStrings> bölümü ile Web.config içeriğini listeleyen bir sayfa görmeniz gerekir (bkz. Şekil 3).You should initially see a page that lists the contents of Web.config with the <connectionStrings> section displayed in plain-text (see Figure 3).

Sayfaya bir TextBox ve Iki düğme web denetimi eklemek Add a TextBox and Two Button Web Controls to the Page

Şekil 3: sayfaya metin kutusu ve Iki düğme web denetimi ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 3: Add a TextBox and Two Button Web Controls to the Page (Click to view full-size image)

Şimdi bağlantı dizelerini şifreleyin düğmesine tıklayın.Now click the Encrypt Connection Strings button. İstek doğrulaması etkinleştirilirse WebConfigContents metin kutusundan geri gönderilen biçimlendirme, istemcide tehlikeli olabilecek bir Request.Form değeri algılanan bir HttpRequestValidationExceptionoluşturur.If request validation is enabled, the markup posted back from the WebConfigContents TextBox will produce an HttpRequestValidationException, which displays the message, A potentially dangerous Request.Form value was detected from the client. ASP.NET 2,0 ' de varsayılan olarak etkinleştirilen istek doğrulaması, kodlanmamış HTML içeren geri göndermeler yasaklar ve betik ekleme saldırılarını önlemeye yardımcı olmak için tasarlanmıştır.Request validation, which is enabled by default in ASP.NET 2.0, prohibits postbacks that include un-encoded HTML and is designed to help prevent script-injection attacks. Bu denetim, sayfa veya uygulama düzeyinde devre dışı bırakılabilir.This check can be disabled at the page- or application-level. Bu sayfada devre dışı bırakmak için ValidateRequest ayarını @Page yönergesinde False olarak ayarlayın.To turn it off for this page, set the ValidateRequest setting to False in the @Page directive. @Page yönergesi sayfa bildirim temelli biçimlendirmenin en üstünde bulunur.The @Page directive is found at the top of the page s declarative markup.

<%@ Page ValidateRequest="False" ... %>

İstek doğrulama hakkında daha fazla bilgi, amacı, sayfa ve uygulama düzeyinde devre dışı bırakma ve HTML kodlama biçimlendirme hakkında daha fazla bilgi için bkz. Istek doğrulama-betik saldırılarını önler.For more information on request validation, its purpose, how to disable it at the page- and application-level, as well as how to HTML encode markup, see Request Validation - Preventing Script Attacks.

Sayfa için istek doğrulamayı devre dışı bıraktıktan sonra, bağlantı dizelerini şifreleyin düğmesine tekrar tıklayın.After disabling request validation for the page, try clicking the Encrypt Connection Strings button again. Geri göndermede, yapılandırma dosyasına erişilir ve <connectionStrings> bölümü DPAPI sağlayıcısı kullanılarak şifrelenir.On postback, the configuration file will be accessed and its <connectionStrings> section encrypted using the DPAPI provider. Metin kutusu daha sonra yeni Web.config içeriğini görüntüleyecek şekilde güncelleştirilir.The TextBox is then updated to display the new Web.config content. Şekil 4 ' ün gösterdiği gibi <connectionStrings> bilgiler artık şifrelenir.As Figure 4 shows, the <connectionStrings> information is now encrypted.

Bağlantı dizelerini şifreleyin düğmesine tıklamak <connectionString> bölümünü şifrelerClicking the Encrypt Connection Strings Button Encrypts the <connectionString> Section

Şekil 4: bağlantı dizelerini şifreleyin düğmesine tıklamak <connectionString> bölümünü şifreler (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 4: Clicking the Encrypt Connection Strings Button Encrypts the <connectionString> Section (Click to view full-size image)

Bilgisayarımda oluşturulan şifreli <connectionStrings> bölümü, <CipherData> öğesinin bazı içerikleri breçekimi için kaldırılmış olsa da aşağıdaki gibidir:The encrypted <connectionStrings> section generated on my computer follows, although some of the content in the <CipherData> element has been removed for brevity:

<connectionStrings 
    configProtectionProvider="DataProtectionConfigurationProvider">
  <EncryptedData>
    <CipherData>
      <CipherValue>AQAAANCMnd8BFdERjHoAwE/...zChw==</CipherValue>
    </CipherData>
  </EncryptedData>
</connectionStrings>

Note

<connectionStrings> öğesi, şifrelemeyi gerçekleştirmek için kullanılan sağlayıcıyı belirtir (DataProtectionConfigurationProvider).The <connectionStrings> element specifies the provider used to perform the encryption (DataProtectionConfigurationProvider). Bu bilgiler, bağlantı dizelerini çöz düğmesine tıklandığında UnprotectSection yöntemi tarafından kullanılır.This information is used by the UnprotectSection method when the Decrypt Connection Strings button is clicked.

Yazdığımız kodla, bir SqlDataSource denetiminden veya otomatik olarak oluşturulan koddan Web.config bağlantı dizesi bilgisine erişildiğinde, otomatik olarak şifresi çözülür.When the connection string information is accessed from Web.config - either by code we write, from a SqlDataSource control, or the auto-generated code from the TableAdapters in our Typed DataSets - it is automatically decrypted. Kısaca şifreli <connectionString> bölümünün şifresini çözmek için ek kod veya mantık eklememiz gerekmez.In short, we do not need to add any extra code or logic to decrypt the encrypted <connectionString> section. Bunu göstermek için, bu anda, temel raporlama bölümündeki (~/BasicReporting/SimpleDisplay.aspx) basit görüntüleme öğreticisi gibi önceki öğreticilerden birini ziyaret edin.To demonstrate this, visit one of the earlier tutorials at this time, such as the Simple Display tutorial from the Basic Reporting section (~/BasicReporting/SimpleDisplay.aspx). Şekil 5 ' i gösterdiği gibi, öğretici tam olarak beklendiği gibi çalışarak, şifrelenmiş bağlantı dizesi bilgilerinin ASP.NET sayfası tarafından otomatik olarak şifresinin çözülmediğini belirtir.As Figure 5 shows, the tutorial works exactly as we would expect it, indicating that the encrypted connection string information is being automatically decrypted by the ASP.NET page.

veri erişim katmanı, bağlantı dizesi bilgilerinin şifresini otomatik olarak çözerThe Data Access Layer Automatically Decrypts the Connection String Information

Şekil 5: veri erişim katmanı, bağlantı dizesi bilgilerinin otomatik olarak şifresini çözer (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 5: The Data Access Layer Automatically Decrypts the Connection String Information (Click to view full-size image)

<connectionStrings> bölümünü düz metin gösterimine geri dönmek için bağlantı dizelerini çöz düğmesine tıklayın.To revert the <connectionStrings> section back to its plain-text representation, click the Decrypt Connection Strings button. Geri göndermede, bağlantı dizelerini düz metin olarak Web.config görmeniz gerekir.On postback you should see the connection strings in Web.config in plain-text. Bu noktada, ekranınızda Bu sayfa ilk kez ziyaret edildiğinde olduğu gibi görünmelidir (Şekil 3 ' te bakın).At this point your screen should look like it did when first visiting this page (see in Figure 3).

3. Adım:aspnet_regiis.exe kullanarak yapılandırma bölümlerini şifrelemeStep 3: Encrypting Configuration Sections Usingaspnet_regiis.exe

.NET Framework, $WINDOWS$\Microsoft.NET\Framework\version\ klasöründeki çeşitli komut satırı araçlarını içerir.The .NET Framework includes a variety of command line tools in the $WINDOWS$\Microsoft.NET\Framework\version\ folder. SQL önbellek bağımlılıklarını kullanma öğreticisinde, ÖRNEĞIN, SQL önbellek bağımlılıkları için gereken altyapıyı eklemek için aspnet_regsql.exe komut satırı aracını kullanma hakkında baktık.In the Using SQL Cache Dependencies tutorial, for instance, we looked at using the aspnet_regsql.exe command line tool to add the infrastructure necessary for SQL cache dependencies. Bu klasördeki başka bir yararlı komut satırı aracı, ASP.NET IIS kayıt aracıdır (aspnet_regiis.exe).Another useful command line tool in this folder is the ASP.NET IIS Registration tool (aspnet_regiis.exe). Adından da anlaşılacağı gibi, ASP.NET IIS kayıt aracı öncelikle Microsoft s Professional-sınıf Web sunucusu, IIS ile bir ASP.NET 2,0 uygulaması kaydetmek için kullanılır.As its name implies, the ASP.NET IIS Registration tool is primarily used to register an ASP.NET 2.0 application with Microsoft s professional-grade Web server, IIS. IIS ile ilgili özelliklerin yanı sıra, ASP.NET IIS kayıt aracı da Web.configbelirtilen yapılandırma bölümlerini şifrelemek veya şifresini çözmek için de kullanılabilir.In addition to its IIS-related features, the ASP.NET IIS Registration tool can also be used to encrypt or decrypt specified configuration sections in Web.config.

Aşağıdaki bildirimde, aspnet_regiis.exe komut satırı aracı ile bir yapılandırma bölümünü şifrelemek için kullanılan genel sözdizimi gösterilmektedir:The following statement shows the general syntax used to encrypt a configuration section with the aspnet_regiis.exe command line tool:

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), fiziksel_Dizin , Web uygulaması 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 (örneğin, DataProtectionConfigurationProvider).section is the configuration section to encrypt (like connectionStrings ), the physical_directory is the full, physical path to the web application s root directory, and provider is the name of the protected configuration provider to use (such as DataProtectionConfigurationProvider ). Alternatif olarak, Web uygulaması IIS 'de kayıtlıysa, aşağıdaki sözdizimini kullanarak fiziksel yol yerine sanal yolu girebilirsiniz:Alternatively, if the web application is registered in IIS you can enter the virtual path instead of the physical path using the following syntax:

aspnet_regiis.exe -pe section -app virtual_directory -prov provider

Aşağıdaki aspnet_regiis.exe örnek, bir makine düzeyindeki anahtarla DPAPI sağlayıcısını kullanarak <connectionStrings> bölümünü şifreler:The following aspnet_regiis.exe example encrypts the <connectionStrings> section using the DPAPI provider with a machine-level key:

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 de kullanılabilir.Similarly, the aspnet_regiis.exe command line tool can be used to decrypt configuration sections. -pef anahtarını kullanmak yerine -pdf kullanın (veya -peyerine -pdkullanın).Instead of using the -pef switch, use -pdf (or instead of -pe, use -pd). Ayrıca, şifre çözme sırasında sağlayıcı adının gerekli olmadığına de unutmayın.Also, note that the provider name is not necessary when decrypting.

aspnet_regiis.exe -pdf section physical_directory
  -- or --
aspnet_regiis.exe -pd section -app virtual_directory

Note

Bilgisayara özel anahtarlar kullanan DPAPI sağlayıcısını kullandığımızdan, Web sayfalarının sunulduğu makineden aspnet_regiis.exe çalıştırmanız gerekir.Since we are using the DPAPI provider, which uses keys specific to the computer, you must run aspnet_regiis.exe from the same machine from which the web pages are being served. Örneğin, bu komut satırı programını yerel geliştirme makinenizden çalıştırırsanız ve sonra şifrelenmiş Web. config dosyasını üretim sunucusuna yüklerseniz, üretim sunucusu şifrelendikten sonra bağlantı dizesi bilgilerinin şifresini çözemeyecektir geliştirme makinenize özel anahtarlar kullanma.For example, if you run this command line program from your local development machine and then upload the encrypted Web.config file to the production server, the production server will not be able to decrypt the connection string information since it was encrypted using keys specific to your development machine. RSA anahtarı başka bir makineye dışarı aktarmak mümkün olduğu için RSA sağlayıcısı bu sınırlamaya sahip değildir.The RSA provider does not have this limitation as it is possible to export the RSA keys to another machine.

Veritabanı kimlik doğrulama seçeneklerini anlamaUnderstanding Database Authentication Options

Herhangi bir uygulama, bir Microsoft SQL Server veritabanına SELECT, INSERT, UPDATEveya DELETE sorguları yayınlamamasından önce, önce veritabanının istek sahibine tanımlaması gerekir.Before any application can issue SELECT, INSERT, UPDATE, or DELETE queries to a Microsoft SQL Server database, the database first must identify the requestor. Bu işlem kimlik doğrulama olarak bilinir ve SQL Server iki kimlik doğrulama yöntemi sağlar:This process is known as authentication and SQL Server provides two methods of authentication:

  • Windows kimlik doğrulaması -uygulamanın üzerinde çalıştığı işlem veritabanıyla iletişim kurmak için kullanılır.Windows Authentication - the process under which the application is running is used to communicate with the database. Visual Studio 2005 s ASP.NET Development Server aracılığıyla bir ASP.NET uygulaması çalıştırırken, ASP.NET uygulaması şu anda oturum açmış kullanıcının kimliğini varsayar.When running an ASP.NET application through Visual Studio 2005 s ASP.NET Development Server, the ASP.NET application assumes the identity of the currently logged on user. Microsoft Internet Information Server (IIS) üzerinde ASP.NET uygulamaları için ASP.NET uygulamaları genellikle domainName``\MachineName veya domainName``\NETWORK SERVICEkimliğini varsayar, ancak bu özelleştirilebilir.For ASP.NET applications on Microsoft Internet Information Server (IIS), ASP.NET applications usually assume the identity of domainName``\MachineName or domainName``\NETWORK SERVICE, although this can be customized.
  • 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 Authentication - a user ID and password values are supplied as credentials for authentication. SQL kimlik doğrulaması ile, Kullanıcı KIMLIĞI ve parola bağlantı dizesinde sağlanır.With SQL authentication, the user ID and password are provided in the connection string.

Daha güvenli olduğundan, Windows kimlik doğrulaması SQL kimlik doğrulaması üzerinden tercih edilir.Windows authentication is preferred over SQL authentication because it is more secure. Windows kimlik doğrulaması ile bağlantı dizesi bir Kullanıcı adı ve paroladan ücretsizdir ve Web sunucusu ve veritabanı sunucusu iki farklı makinede bulunuyorsa, kimlik bilgileri düz metin olarak ağ üzerinden gönderilmez.With Windows authentication the connection string is free from a username and password and if the web server and database server reside on two different machines, the credentials are not sent over the network in plain-text. Ancak, SQL kimlik doğrulaması ile bağlantı dizesinde kimlik doğrulama kimlik bilgileri sabit olarak kodlanmıştır ve Web sunucusundan düz metin olarak veritabanı sunucusuna iletilir.With SQL authentication, however, the authentication credentials are hard-coded in the connection string and are transmitted from the web server to the database server in plain-text.

Bu öğreticiler Windows kimlik doğrulamasını kullandı.These tutorials have used Windows authentication. Bağlantı dizesini inceleyerek hangi kimlik doğrulama modunun kullanıldığını söyleyebilirsiniz.You can tell what authentication mode is being used by inspecting the connection string. Öğreticilerimiz için Web.config bağlantı dizesi:The connection string in Web.config for our tutorials has been:

Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\NORTHWND.MDF; Integrated Security=True; User Instance=True

Tümleşik güvenlik = doğru ve Kullanıcı adının ve parolanın olmaması Windows kimlik doğrulamasının kullanıldığını belirtir.The Integrated Security=True and lack of a username and password indicate that Windows authentication is being used. Bazı bağlantı dizelerine, güvenilen bağlantı = Evet veya tümleşik güvenlik = SSPI terimi tümleşik güvenlik = true yerine kullanılır, ancak üçü de Windows kimlik doğrulamasının kullanımını gösterir.In some connection strings the term Trusted Connection=Yes or Integrated Security=SSPI is used instead of Integrated Security=True, but all three indicate the use of Windows authentication.

Aşağıdaki örnek, SQL kimlik doğrulaması kullanan bir bağlantı dizesini gösterir.The following example shows a connection string that uses SQL authentication. Bağlantı dizesi içine gömülü kimlik bilgilerini aklınızda edin:Note the credentials embedded within the connection string:

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

Bir saldırganın uygulama Web.config dosyanızı görüntüleyebileceklerini düşünün.Imagine that an attacker is able to view your application s Web.config file. Internet ü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 veritabanınıza veya kendi web sitelerindeki ASP.NET sayfalarından bağlantı oluşturabilir.If you use SQL authentication to connect to a database that is accessible over the Internet, the attacker can use this connection string to connect to your database through SQL Management Studio or from ASP.NET pages on their own website. Bu tehdidi azaltmaya yardımcı olmak için korunan yapılandırma sistemini kullanarak Web.config bağlantı dizesi bilgilerini şifreleyin.To help mitigate this threat, encrypt the connection string information in Web.config using the protected configuration system.

Note

SQL Server kullanılabilir farklı kimlik doğrulama türleri hakkında daha fazla bilgi için bkz. secure ASP.NET uygulamaları oluşturma: kimlik doğrulama, yetkilendirme ve güvenli iletişim.For more information on the different types of authentication available in SQL Server, see Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication. Windows ve SQL kimlik doğrulama sözdizimi arasındaki farkları gösteren daha fazla bağlantı dizesi örnekleri için connectionStrings.comadresine bakın.For further connection string examples illustrating the differences between Windows and SQL authentication syntax, refer to ConnectionStrings.com.

ÖzetSummary

Varsayılan olarak, bir ASP.NET uygulamasındaki .config uzantısına sahip dosyalara bir tarayıcıdan erişilemez.By default, files with a .config extension in an ASP.NET application cannot be accessed through a browser. Bu dosya türleri, veritabanı bağlantı dizeleri, Kullanıcı adları ve parolalar gibi hassas bilgileri içerebileceğinden döndürülmez.These types of files are not returned because they may contain sensitive information, such as database connection strings, usernames and passwords, and so on. .NET 2,0 ' deki korumalı yapılandırma sistemi, belirtilen yapılandırma bölümlerinin şifrelenmesini sağlayarak hassas bilgilerin korunmasını sağlar.The protected configuration system in .NET 2.0 helps further protect sensitive information by allowing specified configuration sections to be encrypted. İki yerleşik korumalı yapılandırma sağlayıcısı vardır: RSA algoritmasını kullanan bir ve Windows Data Protection API (DPAPI) kullanan bir tane.There are two built-in protected configuration providers: one that uses the RSA algorithm and one that uses the Windows Data Protection API (DPAPI).

Bu öğreticide, DPAPI sağlayıcısını kullanarak yapılandırma ayarlarının nasıl şifreleneceğini ve şifresinin çözülmesini inceledik.In this tutorial we looked at how to encrypt and decrypt configuration settings using the DPAPI provider. Bu, adım 2 ' de gördüğünüz ve adım 3 ' te ele alınan aspnet_regiis.exe komut satırı aracının yanı sıra programlama yoluyla da gerçekleştirilebilir.This can be accomplished both programmatically, as we saw in Step 2, as well as through the aspnet_regiis.exe command line tool, which was covered in Step 3. 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 okuma bölümündeki kaynaklara bakın.For more information on using user-level keys or using the RSA provider instead, see the resources in the Further Reading section.

Programlamanın kutlu olsun!Happy Programming!

Daha Fazla BilgiFurther Reading

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:For more information on the topics discussed in this tutorial, refer to the following resources:

Yazar hakkındaAbout the Author

4GuysFromRolla.com 'in, Scott Mitchell, yedi ASP/ASP. net books ve 'in yazarı, 1998 sürümünden bu yana Microsoft Web teknolojileriyle çalışmaktadır.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor.Scott works as an independent consultant, trainer, and writer. En son kitabı, 24 saat içinde ASP.NET 2,0 kendi kendinize eğitimister.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. mitchell@4GuysFromRolla.comadresinden erişilebilir .He can be reached at mitchell@4GuysFromRolla.com. ya da blog aracılığıyla http://ScottOnWriting.NETbulabilirsiniz.or via his blog, which can be found at http://ScottOnWriting.NET.

Özel olarak teşekkürlerSpecial Thanks To

Bu öğretici serisi birçok yararlı gözden geçirenler tarafından incelendi.This tutorial series was reviewed by many helpful reviewers. Bu öğreticide lider gözden geçirenler, bir Murphy ve Randy SCHMIDT olarak değiştirildi.Lead reviewers for this tutorial were Teresa Murphy and Randy Schmidt. Yaklaşan MSDN makalelerimi gözden geçiriyor musunuz?Interested in reviewing my upcoming MSDN articles? Öyleyse, benimitchell@4GuysFromRolla.combir satır bırakın .If so, drop me a line at mitchell@4GuysFromRolla.com.