Защита строк подключения и других сведений о конфигурации (VB)Protecting Connection Strings and Other Configuration Information (VB)

по Скотт Митчеллby Scott Mitchell

Скачать код или скачать PDFDownload Code or Download PDF

Приложение ASP.NET обычно хранит сведения о конфигурации в файле Web. config.An ASP.NET application typically stores configuration information in a Web.config file. Некоторые из этих сведений являются конфиденциальными и гарантируют защиту.Some of this information is sensitive and warrants protection. По умолчанию этот файл не будет обслуживаться посетителем веб-узла, но администратор или злоумышленник может получить доступ к файловой системе веб-сервера и просмотреть содержимое файла.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. В этом учебнике мы рассмотрите, что ASP.NET 2,0 позволяет нам защищать конфиденциальные данные путем шифрования разделов файла Web. config.In this tutorial we learn that ASP.NET 2.0 allows us to protect sensitive information by encrypting sections of the Web.config file.

ВведениеIntroduction

Сведения о конфигурации для приложений ASP.NET обычно хранятся в XML-файле с именем Web.config.Configuration information for ASP.NET applications is commonly stored in an XML file named Web.config. В рамках этих руководств мы обновили Web.config несколько раз.Over the course of these tutorials we have updated the Web.config a handful of times. При создании Northwind типизированного набора данных в первом руководстве, например, сведения о строке подключения были автоматически добавлены в Web.config в разделе <connectionStrings>.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. Позже в руководстве " главные страницы и Навигация по сайту " мы вручную обновили Web.config, добавив <pages> элемент, указывающий, что все страницы ASP.NET в проекте должны использовать тему DataWebControls.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 может содержать конфиденциальные данные, такие как строки подключения, важно, чтобы содержимое Web.config быть безопасно и скрыто от неавторизованных средств просмотра.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. По умолчанию любой HTTP-запрос к файлу с расширением .config обрабатывается подсистемой ASP.NET, которая возвращает этот тип страницы, не обозначает сообщение, показанное на рис. 1.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. Это означает, что посетители не смогут просматривать содержимое Web.config файлов, просто вводя http://www.YourServer.com/Web.config в адресную строку браузера.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 через браузер возвращает сообщение Этот тип страницы не обрабатываетсяVisiting Web.config Through a Browser Returns a This type of page is not served Message

Рис. 1. посещение Web.config через браузер возвращает сообщение Этот тип страницы не обрабатывается (щелкните, чтобы просмотреть изображение с полным размером)Figure 1: Visiting Web.config Through a Browser Returns a This type of page is not served Message (Click to view full-size image)

Но что делать, если злоумышленнику удается найти какую-нибудь другую атаку, позволяющую просматривать содержимое Web.config файлов?But what if an attacker is able to find some other exploit that allows her to view your Web.config file s contents? Что может сделать злоумышленник с этой информацией и какие действия можно предпринять для дальнейшей защиты конфиденциальной информации в Web.config?What could an attacker do with this information, and what steps can be taken to further protect the sensitive information within Web.config? К счастью, большинство разделов в Web.config не содержат конфиденциальных сведений.Fortunately, most sections in Web.config do not contain sensitive information. Какой ущерб злоумышленник может перпетрате, если им известно имя темы по умолчанию, используемой страницами ASP.NET?What harm can an attacker perpetrate if they know the name of the default Theme used by your ASP.NET pages?

Однако некоторые Web.config разделы содержат конфиденциальную информацию, которая может содержать строки подключения, имена пользователей, пароли, имена серверов, ключи шифрования и т. д.Certain Web.config sections, however, contain sensitive information that may include connection strings, user names, passwords, server names, encryption keys, and so forth. Эти сведения обычно находятся в следующих разделах Web.config.This information is typically found in the following Web.config sections:

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

В этом учебнике мы рассмотрим методы защиты конфиденциальных сведений о конфигурации.In this tutorial we will look at techniques for protecting such sensitive configuration information. Как мы увидим, .NET Framework версии 2,0 включает систему защищенных конфигураций, которая упрощает шифрование и расшифровку выбранных разделов конфигурации с помощью программирования.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

В этом руководстве в конце рассматриваются рекомендации по подключению к базе данных из приложения ASP.NET.This tutorial concludes with a look at Microsoft s recommendations for connecting to a database from an ASP.NET application. Помимо шифрования строк подключения можно защитить систему, гарантируя безопасное подключение к базе данных в безопасном режиме.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. изучение параметров защищенной конфигурации ASP.NET 2,0 sStep 1: Exploring ASP.NET 2.0 s Protected Configuration Options

ASP.NET 2,0 включает систему защищенной конфигурации для шифрования и расшифровки информации о конфигурации.ASP.NET 2.0 includes a protected configuration system for encrypting and decrypting configuration information. Сюда входят методы в .NET Framework, которые можно использовать для программного шифрования или расшифровки сведений о конфигурации.This includes methods in the .NET Framework that can be used to programmatically encrypt or decrypt configuration information. Защищенная система конфигурации использует модель поставщика, которая позволяет разработчикам выбрать используемую реализацию шифрования.The protected configuration system uses the provider model, which allows developers to choose what cryptographic implementation is used.

.NET Framework поставляется с двумя поставщиками защищенной конфигурации:The .NET Framework ships with two protected configuration providers:

Поскольку защищенная система конфигурации реализует шаблон проектирования поставщика, можно создать собственный поставщик защищенной конфигурации и подключить его к приложению.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. Дополнительные сведения об этом процессе см. в разделе Реализация поставщика защищенной конфигурации .See Implementing a Protected Configuration Provider for more information on this process.

Поставщики RSA и DPAPI используют ключи для своих подпрограмм шифрования и расшифровки, и эти ключи могут храниться на уровне компьютера или пользователя.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. Ключи уровня компьютера идеально подходят для сценариев, в которых веб-приложение выполняется на собственном выделенном сервере или если на сервере есть несколько приложений, которым требуется совместное использование зашифрованных данных.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. Ключи уровня пользователя являются более безопасным вариантом в общих средах размещения, где другие приложения на том же сервере не должны расшифровывать разделы конфигурации, защищенные приложением.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.

В этом учебнике в нашем примере будут использоваться поставщик DPAPI и ключи уровня компьютера.In this tutorial our examples will use the DPAPI provider and machine-level keys. В частности, мы рассмотрим шифрование <connectionStrings> разделе в Web.config, хотя защищенную систему конфигурации можно использовать для шифрования большинства разделов Web.config.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. Сведения об использовании ключей уровня пользователя или поставщика RSA см. в разделе Дополнительные материалы в конце этого руководства.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 и DPAPIProtectedConfigurationProvider регистрируются в файле machine.config с именами поставщиков RsaProtectedConfigurationProvider и DataProtectionConfigurationProviderсоответственно.The RSAProtectedConfigurationProvider and DPAPIProtectedConfigurationProvider providers are registered in the machine.config file with the provider names RsaProtectedConfigurationProvider and DataProtectionConfigurationProvider, respectively. При шифровании или расшифровке сведений о конфигурации необходимо указать соответствующее имя поставщика (RsaProtectedConfigurationProvider или DataProtectionConfigurationProvider) вместо фактического имени типа (RSAProtectedConfigurationProvider и DPAPIProtectedConfigurationProvider).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 можно найти в папке $WINDOWS$\Microsoft.NET\Framework\version\CONFIG.You can find the machine.config file in the $WINDOWS$\Microsoft.NET\Framework\version\CONFIG folder.

Шаг 2. программное шифрование и расшифровка разделов конфигурацииStep 2: Programmatically Encrypting and Decrypting Configuration Sections

С помощью нескольких строк кода можно зашифровать или расшифровать определенный раздел конфигурации, используя указанного поставщика.With a few lines of code we can encrypt or decrypt a particular configuration section using a specified provider. Код, как мы увидим чуть ниже, просто необходимо программно ссылаться на соответствующий раздел конфигурации, вызвать его ProtectSection или метод UnprotectSection, а затем вызвать метод Save, чтобы сохранить изменения.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. Более того, .NET Framework содержит полезную программу командной строки, которая может шифровать и расшифровывать сведения о конфигурации.Moreover, the .NET Framework includes a helpful command line utility that can encrypt and decrypt configuration information. Эта служебная программа командной строки будет рассмотрена на шаге 3.We will explore this command line utility in Step 3.

Чтобы продемонстрировать программную защиту сведений о конфигурации, давайте создадим страницу ASP.NET, которая включает кнопки для шифрования и расшифровки <connectionStrings> разделе в Web.config.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.

Для начала откройте страницу EncryptingConfigSections.aspx в папке AdvancedDAL.Start by opening the EncryptingConfigSections.aspx page in the AdvancedDAL folder. Перетащите элемент управления TextBox из области элементов в конструктор, задав для его свойства ID значение WebConfigContents, его свойство TextMode значение MultiLine, а свойства Width и Rows — в 95% и 15 соответственно.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. Этот элемент управления TextBox будет отображать содержимое Web.config позволяя быстро увидеть, зашифровано ли содержимое.This TextBox control will display the contents of Web.config allowing us to quickly see if the contents are encrypted or not. Конечно, в реальном приложении никогда не нужно отображать содержимое Web.config.Of course, in a real application you would never want to display the contents of Web.config.

Под текстовым полем добавьте два элемента управления "Кнопка" с именами EncryptConnStrings и DecryptConnStrings.Beneath the TextBox, add two Button controls named EncryptConnStrings and DecryptConnStrings. Задайте для свойств текста шифрование строк подключения и расшифровку строк подключения.Set their Text properties to Encrypt Connection Strings and Decrypt Connection Strings .

На этом этапе экран должен выглядеть примерно так, как показано на рис. 2.At this point your screen should look similar to Figure 2.

добавить на страницу текстовое поле и два веб-элемента управления "Кнопка"Add a TextBox and Two Button Web Controls to the Page

Рис. 2. Добавление на страницу элемента управления TextBox и двух кнопок (щелкните, чтобы просмотреть изображение с полным размером)Figure 2: Add a TextBox and Two Button Web Controls to the Page (Click to view full-size image)

Далее необходимо написать код, который загружает и отображает содержимое Web.config в текстовом поле WebConfigContents при первой загрузке страницы.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. Добавьте следующий код в класс кода программной части Pages.Add the following code to the page s code-behind class. Этот код добавляет метод с именем DisplayWebConfig и вызывает его из обработчика событий Page_Load, когда Page.IsPostBack False: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 использует классFile для открытия файла Web.config приложения, классStreamReader для считывания его содержимого в строку, а классPath — для создания физического пути к файлу Web.config.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. Все эти три класса находятся в пространстве именSystem.IO.These three classes are all found in the System.IO namespace. Следовательно, необходимо добавить оператор Imports``System.IO в верхнюю часть класса кода программной части или, в качестве префикса к именам этих классов, с помощью System.IO.Consequently, 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.

Далее необходимо добавить обработчики событий для двух элементов управления "Кнопка" Click событиями и добавить необходимый код для шифрования и расшифровки <connectionStrings> раздела, используя ключ уровня компьютера с поставщиком DPAPI.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. В конструкторе дважды щелкните каждую из кнопок, чтобы добавить обработчик событий Click в класс кода программной части, а затем добавьте следующий код: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

Код, используемый в двух обработчиках событий, практически идентичен.The code used in the two event handlers is nearly identical. Они начинают с получения сведений о текущем приложении Web.config файл с помощью метода WebConfigurationManager класса s OpenWebConfiguration.They both start by getting information about the current application s Web.config file via the WebConfigurationManager class s OpenWebConfiguration method. Этот метод возвращает файл веб-конфигурации для указанного виртуального пути.This method returns the web configuration file for the specified virtual path. Затем доступ к разделу Web.config Files <connectionStrings> осуществляется через метод Configuration класса s GetSection(sectionName), который возвращает объект ConfigurationSection .Next, the Web.config file s <connectionStrings> section is accessed via the Configuration class s GetSection(sectionName) method, which returns a ConfigurationSection object.

Объект ConfigurationSection включает свойствоSectionInformation , которое предоставляет дополнительные сведения и функциональные возможности, касающиеся раздела конфигурации.The ConfigurationSection object includes a SectionInformation property that provides additional information and functionality regarding the configuration section. Как показано в приведенном выше коде, можно определить, зашифрован ли раздел конфигурации, проверив свойство SectionInformation свойства IsProtected.As the code above shows, we can determine whether the configuration section is encrypted by checking the SectionInformation property s IsProtected property. Более того, раздел можно шифровать или расшифровать с помощью SectionInformation свойств ProtectSection(provider) и методов UnprotectSection.Moreover, the section can be encrypted or decrypted via the SectionInformation property s ProtectSection(provider) and UnprotectSection methods.

Метод ProtectSection(provider) принимает в качестве входных данных строку, указывающую имя поставщика защищенной конфигурации, который будет использоваться при шифровании.The ProtectSection(provider) method accepts as input a string specifying the name of the protected configuration provider to use when encrypting. В обработчике событий кнопки EncryptConnString s мы передаем Датапротектионконфигуратионпровидер в метод ProtectSection(provider), чтобы использовался поставщик DPAPI.In the EncryptConnString Button s event handler we pass DataProtectionConfigurationProvider into the ProtectSection(provider) method so that the DPAPI provider is used. Метод UnprotectSection может определить поставщика, который использовался для шифрования раздела конфигурации, и поэтому не требует входных параметров.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) или UnprotectSection необходимо вызвать метод Configuration Object s Save , чтобы сохранить изменения.After calling the ProtectSection(provider) or UnprotectSection method, you must call the Configuration object s Save method to persist the changes. После того как сведения о конфигурации будут зашифрованы или расшифрованы, а изменения сохранены, мы вызываем DisplayWebConfig, чтобы загрузить обновленное содержимое Web.config в элемент управления TextBox.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.

После введения приведенного выше кода протестируйте его, посетив страницу EncryptingConfigSections.aspx в браузере.Once you have entered the above code, test it by visiting the EncryptingConfigSections.aspx page through a browser. Сначала должна отобразиться страница со списком содержимого Web.config с <connectionStrings>ным разделом в виде обычного текста (см. рис. 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).

добавить на страницу текстовое поле и два веб-элемента управления "Кнопка"Add a TextBox and Two Button Web Controls to the Page

Рис. 3. Добавление на страницу элемента управления TextBox и двух кнопок (щелкните, чтобы просмотреть изображение с полным размером)Figure 3: Add a TextBox and Two Button Web Controls to the Page (Click to view full-size image)

Теперь нажмите кнопку шифрование строк подключения.Now click the Encrypt Connection Strings button. Если проверка запросов включена, разметка, отправленная обратно из текстового поля WebConfigContents, создаст HttpRequestValidationException, в котором отображается сообщение, в клиенте было обнаружено потенциально опасное значение Request.Form.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, запрещает обратные передачи, включающие в себя незакодированный HTML, и предназначено для предотвращения атак путем внедрения скриптов.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. Эту проверку можно отключить на уровне страницы или приложения.This check can be disabled at the page- or application-level. Чтобы отключить его для этой страницы, задайте для параметра ValidateRequest значение False в директиве @Page.To turn it off for this page, set the ValidateRequest setting to False in the @Page directive. Директива @Page находится в верхней части декларативной разметки страницы s.The @Page directive is found at the top of the page s declarative markup.

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

Дополнительные сведения о проверке запросов, ее назначении, отключении на уровне страницы и приложения, а также о том, как кодировать HTML, см. в разделе Проверка запросов — предотвращение атак с помощью сценариев.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.

После отключения проверки запроса для страницы снова нажмите кнопку шифрование строк подключения.After disabling request validation for the page, try clicking the Encrypt Connection Strings button again. При обратной передаче доступ к файлу конфигурации будет осуществляться, а его <connectionStrings> раздел шифруется с помощью поставщика DPAPI.On postback, the configuration file will be accessed and its <connectionStrings> section encrypted using the DPAPI provider. Затем текстовое поле обновляется для вывода нового содержимого Web.config.The TextBox is then updated to display the new Web.config content. Как показано на рис. 4, <connectionStrings>ная информация теперь зашифрована.As Figure 4 shows, the <connectionStrings> information is now encrypted.

нажатии кнопки "шифровать строки подключения" шифрует <раздел connectionString>Clicking the Encrypt Connection Strings Button Encrypts the <connectionString> Section

Рис. 4. нажатие кнопки "шифровать строки подключения" шифрует раздел <connectionString> (щелкните, чтобы просмотреть изображение с полным размером)Figure 4: Clicking the Encrypt Connection Strings Button Encrypts the <connectionString> Section (Click to view full-size image)

Зашифрованный раздел <connectionStrings>, созданный на моем компьютере, хотя часть содержимого элемента <CipherData> была удалена для краткости: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> указывает поставщика, используемого для шифрования (DataProtectionConfigurationProvider).The <connectionStrings> element specifies the provider used to perform the encryption (DataProtectionConfigurationProvider). Эти сведения используются методом UnprotectSection при нажатии кнопки расшифровывать строки подключения.This information is used by the UnprotectSection method when the Decrypt Connection Strings button is clicked.

Когда доступ к сведениям о строке подключения осуществляется из Web.configного кода, из элемента управления SqlDataSource или автоматически созданного кода из адаптеров таблиц TableAdapter в типизированных наборах данных, он автоматически расшифровывается.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. Вкратце, нам не нужно добавлять дополнительный код или логику для расшифровки зашифрованного раздела <connectionString>.In short, we do not need to add any extra code or logic to decrypt the encrypted <connectionString> section. Чтобы продемонстрировать это, посетите один из предыдущих руководств в настоящее время, например в учебнике по простому экрану в разделе "базовый отчет" (~/BasicReporting/SimpleDisplay.aspx).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). Как показано на рис. 5, учебник работает точно так же, как и предполагается, что означает, что зашифрованная информация строки подключения автоматически расшифровывается страницей ASP.NET.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.

уровень доступа к данным автоматически расшифровывает сведения строки подключенияThe Data Access Layer Automatically Decrypts the Connection String Information

Рис. 5. уровень доступа к данным автоматически расшифровывает данные строки подключения (щелкните, чтобы просмотреть изображение с полным размером)Figure 5: The Data Access Layer Automatically Decrypts the Connection String Information (Click to view full-size image)

Чтобы вернуть <connectionStrings> раздел к текстовому представлению, нажмите кнопку расшифровать строки подключения.To revert the <connectionStrings> section back to its plain-text representation, click the Decrypt Connection Strings button. При обратной передаче строки подключения должны отображаться в Web.config в виде обычного текста.On postback you should see the connection strings in Web.config in plain-text. На этом этапе экран должен выглядеть, как при первом посещении этой страницы (см. рис. 3).At this point your screen should look like it did when first visiting this page (see in Figure 3).

Шаг 3. Шифрование разделов конфигурации с помощьюaspnet_regiis.exeStep 3: Encrypting Configuration Sections Usingaspnet_regiis.exe

.NET Framework включает в себя различные средства командной строки в папке $WINDOWS$\Microsoft.NET\Framework\version\.The .NET Framework includes a variety of command line tools in the $WINDOWS$\Microsoft.NET\Framework\version\ folder. Например, в учебнике Использование зависимостей кэша SQL мы рассматривали использование программы командной строки aspnet_regsql.exe для добавления инфраструктуры, необходимой для зависимостей кэша SQL.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. Еще одним полезным средством командной строки в этой папке является средство регистрации ASP.NET IIS (aspnet_regiis.exe).Another useful command line tool in this folder is the ASP.NET IIS Registration tool (aspnet_regiis.exe). Как следует из названия, средство регистрации ASP.NET IIS в основном используется для регистрации приложения ASP.NET 2,0 с веб-сервером Microsoft s профессионального уровня, IIS.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, средство регистрации ASP.NET IIS также можно использовать для шифрования или расшифровки указанных разделов конфигурации в Web.config.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.

В следующей инструкции показан общий синтаксис, используемый для шифрования раздела конфигурации с помощью средства командной строки aspnet_regiis.exe.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

раздел — это раздел конфигурации для шифрования (например, ConnectionString), физический_каталог — полный физический путь к корневому каталогу веб-приложения, а provider — имя поставщика защищенной конфигурации для использования (например, датапротектионконфигуратионпровидер).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 ). Кроме того, если веб-приложение зарегистрировано в службах IIS, можно ввести виртуальный путь вместо физического пути, используя следующий синтаксис: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

В следующем примере aspnet_regiis.exe <connectionStrings> раздел шифруется с помощью поставщика DPAPI с ключом уровня компьютера: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"

Аналогичным образом средство командной строки aspnet_regiis.exe можно использовать для расшифровки разделов конфигурации.Similarly, the aspnet_regiis.exe command line tool can be used to decrypt configuration sections. Вместо использования параметра -pef используйте -pdf (или вместо -peиспользуйте -pd).Instead of using the -pef switch, use -pdf (or instead of -pe, use -pd). Кроме того, обратите внимание, что при расшифровке не требуется имя поставщика.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

Так как мы используем поставщик DPAPI, который использует ключи, относящиеся к компьютеру, необходимо запустить aspnet_regiis.exe с того же компьютера, с которого обслуживаются веб-страницы.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. Например, если запустить эту программу командной строки с локального компьютера разработки, а затем передать зашифрованный файл Web. config рабочему серверу, то рабочий сервер не сможет расшифровать данные строки подключения с момента шифрования. Использование ключей, характерных для компьютера разработки.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 не имеет этого ограничения, так как можно экспортировать ключи RSA на другой компьютер.The RSA provider does not have this limitation as it is possible to export the RSA keys to another machine.

Основные сведения о параметрах аутентификации базы данныхUnderstanding Database Authentication Options

Прежде чем какое-либо приложение сможет выдавать SELECT, INSERT, UPDATEили DELETE запросы к базе данных Microsoft SQL Server, база данных сначала должна опознать запрашивающий.Before any application can issue SELECT, INSERT, UPDATE, or DELETE queries to a Microsoft SQL Server database, the database first must identify the requestor. Этот процесс называется проверкой подлинности , а SQL Server предоставляет два метода проверки подлинности:This process is known as authentication and SQL Server provides two methods of authentication:

  • Проверка подлинности Windows . процесс, при котором выполняется приложение, используется для взаимодействия с базой данных.Windows Authentication - the process under which the application is running is used to communicate with the database. При запуске приложения ASP.NET с помощью Visual Studio 2005 s ASP.NET Development Server в приложении ASP.NET предполагается удостоверение вошедшего в систему пользователя.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. Для ASP.NET приложений на сервере Microsoft Internet Information Server (IIS) ASP.NET приложения обычно предполагают идентификацию domainName``\MachineName или domainName``\NETWORK SERVICE, хотя это можно настроить.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 . значения идентификатора пользователя и пароля предоставляются в качестве учетных данных для проверки подлинности.SQL Authentication - a user ID and password values are supplied as credentials for authentication. При использовании проверки подлинности SQL идентификатор пользователя и пароль предоставляются в строке подключения.With SQL authentication, the user ID and password are provided in the connection string.

Проверка подлинности Windows предпочтительнее, чем проверка подлинности SQL, так как она более безопасна.Windows authentication is preferred over SQL authentication because it is more secure. При использовании проверки подлинности Windows строка подключения предоставляется бесплатно из имени пользователя и пароля. Если веб-сервер и сервер базы данных находятся на двух разных компьютерах, то эти учетные данные не отправляются по сети в виде обычного текста.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. Однако при использовании проверки подлинности SQL учетные данные проверки подлинности жестко запрограммированы в строке подключения и передаются с веб-сервера на сервер базы данных в виде обычного текста.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.

В этих учебниках используется проверка подлинности Windows.These tutorials have used Windows authentication. Чтобы узнать, какой режим проверки подлинности используется, проверьте строку подключения.You can tell what authentication mode is being used by inspecting the connection string. Строка подключения в Web.config для наших учебников:The connection string in Web.config for our tutorials has been:

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

Встроенная безопасность = true и отсутствие имени пользователя и пароля указывают на то, что используется проверка подлинности Windows.The Integrated Security=True and lack of a username and password indicate that Windows authentication is being used. В некоторых строках подключения используется термин доверительное соединение = да или встроенная безопасность = SSPI вместо встроенной безопасности = true, но все три указывают на использование проверки подлинности Windows.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.

В следующем примере показана строка подключения, использующая проверку подлинности SQL.The following example shows a connection string that uses SQL authentication. Обратите внимание на учетные данные, внедренные в строку подключения:Note the credentials embedded within the connection string:

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

Представьте себе, что злоумышленник может просмотреть приложение Web.config файл.Imagine that an attacker is able to view your application s Web.config file. Если для подключения к базе данных, доступной через Интернет, используется проверка подлинности SQL, злоумышленник может использовать эту строку подключения для подключения к базе данных с помощью SQL Management Studio или ASP.NET страниц на своем собственном веб-сайте.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. Чтобы уменьшить эту угрозу, зашифруйте данные строки подключения в Web.config с помощью системы защищенной конфигурации.To help mitigate this threat, encrypt the connection string information in Web.config using the protected configuration system.

Note

Дополнительные сведения о различных типах проверки подлинности, доступных в SQL Server, см. в разделе Создание безопасных приложений ASP.NET: проверка подлинности, авторизация и безопасная связь.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 и SQL, см. в разделе connectionStrings.com.For further connection string examples illustrating the differences between Windows and SQL authentication syntax, refer to ConnectionStrings.com.

СводкаSummary

По умолчанию файлы с расширением .config в приложении ASP.NET недоступны через браузер.By default, files with a .config extension in an ASP.NET application cannot be accessed through a browser. Эти типы файлов не возвращаются, так как они могут содержать конфиденциальные сведения, например строки подключения к базе данных, имена пользователей и пароли и т. д.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 помогает дополнительно защитить конфиденциальную информацию, позволяя зашифровать указанные разделы конфигурации.The protected configuration system in .NET 2.0 helps further protect sensitive information by allowing specified configuration sections to be encrypted. Существует два встроенных поставщика защищенной конфигурации: один использует алгоритм RSA и один, использующий API защиты данных Windows (DPAPI).There are two built-in protected configuration providers: one that uses the RSA algorithm and one that uses the Windows Data Protection API (DPAPI).

В этом учебнике мы рассмотрели шифрование и расшифровку параметров конфигурации с помощью поставщика DPAPI.In this tutorial we looked at how to encrypt and decrypt configuration settings using the DPAPI provider. Это можно сделать программно, как было показано на шаге 2, а также с помощью средства командной строки aspnet_regiis.exe, которое было рассмотрено на шаге 3.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. Дополнительные сведения об использовании ключей уровня пользователя или поставщика RSA см. в разделе ресурсы в дальнейшем.For more information on using user-level keys or using the RSA provider instead, see the resources in the Further Reading section.

Поздравляем с программированием!Happy Programming!

Дополнительные материалыFurther Reading

Дополнительные сведения о разделах, обсуждаемых в этом руководстве, см. в следующих ресурсах:For more information on the topics discussed in this tutorial, refer to the following resources:

Об автореAbout the Author

Скотт Митчелл, автор семи книг по ASP/ASP. NET и основатель 4GuysFromRolla.com, работал с веб-технологиями Майкрософт с 1998.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Скотт работает как независимый консультант, преподаватель и модуль записи.Scott works as an independent consultant, trainer, and writer. Его последняя книга — Sams обучать себя ASP.NET 2,0 за 24 часа.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Он доступен по адресу mitchell@4GuysFromRolla.com.He can be reached at mitchell@4GuysFromRolla.com. или через его блог, который можно найти по адресу http://ScottOnWriting.NET.or via his blog, which can be found at http://ScottOnWriting.NET.

Специальная благодарностьSpecial Thanks To

Эта серия руководств была рассмотрена многими полезными рецензентами.This tutorial series was reviewed by many helpful reviewers. Потенциальные рецензенты для этого учебника были Терезой Мерфи и Рэнди Шмидт.Lead reviewers for this tutorial were Teresa Murphy and Randy Schmidt. Хотите ознакомиться с моими будущими статьями MSDN?Interested in reviewing my upcoming MSDN articles? Если это так, расположите строку в mitchell@4GuysFromRolla.com.If so, drop me a line at mitchell@4GuysFromRolla.com.