다음을 통해 공유


연결 문자열 및 기타 구성 정보 보호(VB)

작성자 : Scott Mitchell

PDF 다운로드

ASP.NET 애플리케이션은 일반적으로 구성 정보를 Web.config 파일에 저장합니다. 이 정보 중 일부는 민감하며 보호를 보증합니다. 기본적으로 이 파일은 웹 사이트 방문자에게 제공되지 않지만 관리자 또는 해커는 웹 서버의 파일 시스템에 액세스하고 파일의 내용을 볼 수 있습니다. 이 자습서에서는 ASP.NET 2.0을 통해 Web.config 파일의 섹션을 암호화하여 중요한 정보를 보호할 수 있다는 것을 알아봅니다.

소개

ASP.NET 애플리케이션에 대한 구성 정보는 일반적으로 라는 Web.configXML 파일에 저장됩니다. 이러한 자습서를 진행하는 동안 몇 번 업데이트했습니다 Web.config . 예를 들어 첫 번째 자습서에서 Typed DataSet을 만들 Northwind 때 연결 문자열 정보가 섹션에 Web.config<connectionStrings> 자동으로 추가되었습니다. 나중에 마스터 페이지 및 사이트 탐색 자습서에서 프로젝트의 모든 ASP.NET 페이지가 테마를 사용해야 DataWebControls 함을 나타내는 요소를 추가하여 <pages> 를 수동으로 업데이트Web.config했습니다.

Web.config 연결 문자열과 같은 중요한 데이터가 포함될 수 있으므로 의 Web.config 콘텐츠를 안전하게 유지하고 권한 없는 뷰어로부터 숨기는 것이 중요합니다. 기본적으로 확장이 있는 .config 파일에 대한 HTTP 요청은 ASP.NET 엔진에서 처리되며, 이 형식의 페이지는 그림 1에 표시된 메시지를 제공하지 않습니다. 즉, 방문자는 단순히 브라우저의 주소 표시줄에 입력 http://www.YourServer.com/Web.config 하여 파일 내용을 볼 Web.config 수 없습니다.

브라우저를 통해 Web.config 방문하면 이 유형의 페이지가 메시지를 제공하지 않습니다.

그림 1: 브라우저를 Web.config 통해 방문이 페이지가 제공되지 않음을 반환합니다(전체 크기 이미지를 보려면 클릭).

그러나 공격자가 파일 내용을 볼 Web.config 수 있는 다른 악용을 찾을 수 있다면 어떨까요? 공격자는 이 정보를 사용하여 무엇을 할 수 있으며, 내에서 Web.config중요한 정보를 추가로 보호하기 위해 수행할 수 있는 단계는 무엇인가요? 다행히 의 대부분의 섹션에는 Web.config 중요한 정보가 포함되어 있지 않습니다. 공격자가 ASP.NET 페이지에서 사용하는 기본 테마의 이름을 알고 있는 경우 어떤 피해를 줄 수 있나요?

그러나 특정 Web.config 섹션에는 연결 문자열, 사용자 이름, 암호, 서버 이름, 암호화 키 등이 포함될 수 있는 중요한 정보가 포함되어 있습니다. 이 정보는 일반적으로 다음 섹션에서 찾을 수 있습니다 Web.config .

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

이 자습서에서는 이러한 중요한 구성 정보를 보호하기 위한 기술을 살펴봅니다. 여기서 볼 수 있듯이 .NET Framework 버전 2.0에는 프로그래밍 방식으로 선택한 구성 섹션을 암호화하고 암호를 해독하는 보호된 구성 시스템이 포함되어 있습니다.

참고

이 자습서에서는 ASP.NET 애플리케이션에서 데이터베이스에 연결하기 위한 Microsoft의 권장 사항을 살펴봅니다. 연결 문자열을 암호화하는 것 외에도 데이터베이스에 안전하게 연결하도록 하여 시스템을 강화할 수 있습니다.

1단계: ASP.NET 2.0의 보호된 구성 옵션 탐색

ASP.NET 2.0에는 구성 정보를 암호화하고 암호 해독하기 위한 보호된 구성 시스템이 포함되어 있습니다. 여기에는 프로그래밍 방식으로 구성 정보를 암호화하거나 암호를 해독하는 데 사용할 수 있는 .NET Framework 메서드가 포함됩니다. 보호된 구성 시스템은 개발자가 사용되는 암호화 구현을 선택할 수 있는 공급자 모델을 사용합니다.

.NET Framework 두 개의 보호된 구성 공급자와 함께 제공됩니다.

보호된 구성 시스템은 공급자 디자인 패턴을 구현하므로 사용자 고유의 보호된 구성 공급자를 만들고 애플리케이션에 연결할 수 있습니다. 이 프로세스 에 대한 자세한 내용은 보호된 구성 공급자 구현 을 참조하세요.

RSA 및 DPAPI 공급자는 암호화 및 암호 해독 루틴에 키를 사용하며 이러한 키는 컴퓨터 또는 사용자 수준에 저장할 수 있습니다. 컴퓨터 수준 키는 웹 애플리케이션이 자체 전용 서버에서 실행되거나 암호화된 정보를 공유해야 하는 서버에 여러 애플리케이션이 있는 경우에 적합합니다. 사용자 수준 키는 동일한 서버의 다른 애플리케이션이 애플리케이션의 보호된 구성 섹션의 암호를 해독할 수 없는 공유 호스팅 환경에서 보다 안전한 옵션입니다.

이 자습서에서는 DPAPI 공급자 및 머신 수준 키를 사용하는 예제입니다. 특히 보호된 구성 시스템을 사용하여 대부분의 Web.config 섹션을 <connectionStrings> 암호화할 수 있지만 의 Web.config섹션 암호화를 살펴보겠습니다. 사용자 수준 키를 사용하거나 RSA 공급자를 사용하는 방법에 대한 자세한 내용은 이 자습서의 끝에 있는 추가 읽기 섹션의 리소스를 참조하세요.

참고

및 공급자는 RSAProtectedConfigurationProvider 각각 공급자 이름과 DataProtectionConfigurationProviderRsaProtectedConfigurationProvider 를 사용하여 파일에 등록 machine.configDPAPIProtectedConfigurationProvider 됩니다. 구성 정보를 암호화하거나 암호를 해독할 때 실제 형식 이름( 및 DPAPIProtectedConfigurationProvider)이 아닌 적절한 공급자 이름(RsaProtectedConfigurationProviderRSAProtectedConfigurationProvider 또는 DataProtectionConfigurationProvider)을 제공해야 합니다. 폴더에서 machine.config$WINDOWS$\Microsoft.NET\Framework\version\CONFIG 파일을 찾을 수 있습니다.

2단계: 프로그래밍 방식으로 구성 섹션 암호화 및 암호 해독

몇 줄의 코드를 사용하면 지정된 공급자를 사용하여 특정 구성 섹션을 암호화하거나 암호 해독할 수 있습니다. 곧 표시되는 것처럼 코드는 프로그래밍 방식으로 적절한 구성 섹션을 참조하고, 해당 또는 UnprotectSection 메서드를 호출한 ProtectSection 다음, 메서드를 호출 Save 하여 변경 내용을 유지해야 합니다. 또한 .NET Framework 구성 정보를 암호화하고 암호를 해독할 수 있는 유용한 명령줄 유틸리티가 포함되어 있습니다. 3단계에서 이 명령줄 유틸리티를 살펴보겠습니다.

프로그래밍 방식으로 구성 정보를 보호하는 방법을 설명하기 위해 의 섹션Web.config을 암호화하고 암호 해독하기 <connectionStrings> 위한 단추가 포함된 ASP.NET 페이지를 만들어 보겠습니다.

먼저 폴더에서 EncryptingConfigSections.aspxAdvancedDAL 페이지를 엽니다. Toolbox에서 Designer TextBox 컨트롤을 끌어 속성을 IDWebConfigContents로 설정하고 속성을 로, TextModeMultiLineWidthRows 속성을 각각 95%와 15로 설정합니다. 이 TextBox 컨트롤에는 콘텐츠가 Web.config 암호화되었는지 여부를 빠르게 확인할 수 있는 내용이 표시됩니다. 물론 실제 애플리케이션에서는 의 Web.config내용을 표시하지 않을 수 있습니다.

TextBox 아래에 및 DecryptConnStrings라는 EncryptConnStrings 단추 컨트롤 두 개를 추가합니다. 텍스트 속성을 연결 문자열 암호화 및 연결 문자열 암호 해독으로 설정합니다.

이 시점에서 화면은 그림 2와 유사하게 표시됩니다.

새 TextBox와 두 개의 단추 컨트롤이 있는 EncryptingConfigSections.aspx 페이지에 열려 있는 Visual Studio를 보여 주는 스크린샷

그림 2: 페이지에 TextBox 및 두 개의 단추 웹 컨트롤 추가(전체 크기 이미지를 보려면 클릭)

다음으로, 페이지가 처음 로드될 때 TextBox에서 WebConfigContentsWeb.config 콘텐츠를 로드하고 표시하는 코드를 작성해야 합니다. 페이지의 코드 숨김 클래스에 다음 코드를 추가합니다. 이 코드는 라는 DisplayWebConfig 메서드를 추가하고 가 인 Page_Load 경우 Page.IsPostBackFalse이벤트 처리기에서 호출합니다.

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 실제 경로를 생성합니다. 이러한 세 클래스는 모두 네임스페이System.IO스에 있습니다. 따라서 코드 숨김 클래스의 맨 위에 문을 추가 Imports``System.IO 하거나 이러한 클래스 이름을 접두사로 추가해야 합니다. System.IO.

다음으로, 두 Button 컨트롤 Click 이벤트에 대한 이벤트 처리기를 추가하고 DPAPI 공급자와 함께 컴퓨터 수준 키를 사용하여 섹션을 암호화하고 암호 <connectionStrings> 해독하는 데 필요한 코드를 추가해야 합니다. Designer 각 Buttons를 두 번 클릭하여 코드 숨김 클래스에 이벤트 처리기를 추가 Click 한 다음 다음 코드를 추가합니다.

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

두 이벤트 처리기에서 사용되는 코드는 거의 동일합니다. 둘 다 클래스의 OpenWebConfiguration 메서드를 통해 현재 애플리케이션의 Web.config 파일에 대한 정보를 가져오는 것으로 WebConfigurationManager 시작합니다. 이 메서드는 지정된 가상 경로에 대한 웹 구성 파일을 반환합니다. 다음으로, Web.config 파일의 <connectionStrings> 섹션은 개체를 Configuration 반환하는 클래스의 GetSection(sectionName) 메서드ConfigurationSection 통해 액세스됩니다.

개체에는 ConfigurationSection 구성 섹션에 SectionInformation 대한 추가 정보 및 기능을 제공하는 속성이 포함되어 있습니다. 위의 코드와 같이 속성의 IsProtected 속성을 확인하여 SectionInformation 구성 섹션이 암호화되는지 여부를 확인할 수 있습니다. 또한 섹션은 속성 및 ProtectSection(provider)UnprotectSection 메서드를 통해 SectionInformation 암호화되거나 암호 해독될 수 있습니다.

메서드는 ProtectSection(provider) 암호화할 때 사용할 보호된 구성 공급자의 이름을 지정하는 문자열을 입력으로 허용합니다. EncryptConnString Button의 이벤트 처리기에서 DPAPI 공급자가 사용되도록 DataProtectionConfigurationProvider를 메서드에 ProtectSection(provider) 전달합니다. 메서드는 UnprotectSection 구성 섹션을 암호화하는 데 사용된 공급자를 확인할 수 있으므로 입력 매개 변수가 필요하지 않습니다.

또는 메서드를 호출한 ProtectSection(provider) 후 개체의 Save 메서드Configuration 호출하여 변경 내용을 유지해야 합니다.UnprotectSection 구성 정보가 암호화 또는 암호 해독되고 변경 내용이 저장되면 를 호출 DisplayWebConfig 하여 업데이트 Web.config 된 콘텐츠를 TextBox 컨트롤에 로드합니다.

위의 코드를 입력한 후에는 브라우저를 EncryptingConfigSections.aspx 통해 페이지를 방문하여 테스트합니다. 처음에는 섹션이 일반 텍스트로 <connectionStrings> 표시된 의 내용을 Web.config 나열하는 페이지가 표시됩니다(그림 3 참조).

웹 브라우저에 로드된 EncryptingConfigSections.aspx 페이지를 보여 주는 스크린샷

그림 3: 페이지에 TextBox 및 두 개의 단추 웹 컨트롤 추가(전체 크기 이미지를 보려면 클릭)

이제 연결 문자열 암호화 단추를 클릭합니다. 요청 유효성 검사를 사용하도록 설정하면 TextBox에서 다시 게시한 태그가 WebConfigContents 메시지를 표시하는 를 생성 HttpRequestValidationException합니다. 이는 클라이언트에서 잠재적으로 위험한 Request.Form 값이 검색되었습니다. ASP.NET 2.0에서 기본적으로 사용하도록 설정된 요청 유효성 검사는 인코딩되지 않은 HTML을 포함하는 포스트백을 금지하며 스크립트 삽입 공격을 방지하도록 설계되었습니다. 이 검사 페이지 또는 애플리케이션 수준에서 사용하지 않도록 설정할 수 있습니다. 이 페이지에 대해 해제하려면 지시문에서 ValidateRequest 설정을 로 False@Page 설정합니다. @Page 지시문은 페이지 선언적 태그의 맨 위에 있습니다.

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

요청 유효성 검사, 해당 목적, 페이지 및 애플리케이션 수준에서 사용하지 않도록 설정하는 방법 및 HTML 인코딩 태그에 대한 자세한 내용은 요청 유효성 검사 - 스크립트 공격 방지를 참조하세요.

페이지에 대한 요청 유효성 검사를 사용하지 않도록 설정하면 연결 문자열 암호화 단추를 다시 클릭합니다. 포스트백 시 구성 파일에 액세스하고 해당 섹션은 <connectionStrings> DPAPI 공급자를 사용하여 암호화됩니다. 그런 다음 새 Web.config 콘텐츠를 표시하도록 TextBox가 업데이트됩니다. 그림 4에서 <connectionStrings> 보여 주듯이 이제 정보가 암호화됩니다.

연결 문자열 암호화 단추를 클릭하면 connectionString> 섹션 암호화 <

그림 4: 연결 문자열 암호화 단추 섹션 암호화 <connectionString> 를 클릭합니다(전체 크기 이미지를 보려면 클릭).

내 컴퓨터에서 생성된 암호화된 <connectionStrings> 섹션은 다음과 같습니다. 단, 요소의 일부 콘텐츠 <CipherData> 가 간결하게 제거되었습니다.

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

참고

요소는 <connectionStrings> 암호화(DataProtectionConfigurationProvider)를 수행하는 데 사용되는 공급자를 지정합니다. 이 정보는 연결 문자열 암호 해독 단추를 클릭할 때 메서드에서 사용됩니다 UnprotectSection .

작성하는 코드, SqlDataSource 컨트롤 또는 형식화된 데이터 세트의 TableAdapters에서 자동으로 생성된 코드 등에서 연결 문자열 정보에 액세스 Web.config 하면 자동으로 암호가 해독됩니다. 즉, 암호화된 <connectionString> 섹션의 암호를 해독하기 위해 추가 코드 또는 논리를 추가할 필요가 없습니다. 이를 보여 주려면 현재 기본 보고 섹션(~/BasicReporting/SimpleDisplay.aspx)의 단순 표시 자습서와 같은 이전 자습서 중 하나를 방문하세요. 그림 5에서 볼 수 있듯이 이 자습서는 예상대로 작동하며, 암호화된 연결 문자열 정보가 ASP.NET 페이지에서 자동으로 암호 해독되고 있음을 나타냅니다.

데이터 액세스 계층은 연결 문자열 정보를 자동으로 해독합니다.

그림 5: 데이터 액세스 계층이 자동으로 연결 문자열 정보의 암호를 해독합니다(전체 크기 이미지를 보려면 클릭).

섹션을 <connectionStrings> 일반 텍스트 표현으로 다시 되돌리기 연결 문자열 암호 해독 단추를 클릭합니다. 포스트백 시 일반 텍스트로 연결 문자열이 Web.config 표시됩니다. 이 시점에서 화면은 이 페이지를 처음 방문할 때와 같이 표시됩니다(그림 3 참조).

3단계: aspnet_regiis.exe 사용하여 구성 섹션 암호화

.NET Framework 폴더에 다양한 명령줄 도구를 $WINDOWS$\Microsoft.NET\Framework\version\ 포함합니다. INSTANCE SQL 캐시 종속성 사용 자습서에서는 명령줄 도구를 사용하여 aspnet_regsql.exe SQL 캐시 종속성에 필요한 인프라를 추가하는 방법을 살펴보았습니다. 이 폴더의 또 다른 유용한 명령줄 도구는 ASP.NET IIS 등록 도구(aspnet_regiis.exe)입니다. 이름에서 알 수 있듯이 ASP.NET IIS 등록 도구는 주로 Microsoft의 전문급 웹 서버인 IIS에 ASP.NET 2.0 애플리케이션을 등록하는 데 사용됩니다. IIS 관련 기능 외에도 ASP.NET IIS 등록 도구를 사용하여 에서 Web.config지정된 구성 섹션을 암호화하거나 암호 해독할 수도 있습니다.

다음 문은 명령줄 도구를 사용하여 구성 섹션 aspnet_regiis.exe 을 암호화하는 데 사용되는 일반 구문을 보여 줍니다.

aspnet_regiis.exe -pef section physical_directory -prov provider

섹션 은(예: connectionStrings) 암호화할 구성 섹션이며 , physical_directory 웹 애플리케이션의 루트 디렉터리에 대한 전체 물리적 경로이며 공급자 는 사용할 보호된 구성 공급자의 이름입니다(예: DataProtectionConfigurationProvider). 또는 웹 애플리케이션이 IIS에 등록된 경우 다음 구문을 사용하여 실제 경로 대신 가상 경로를 입력할 수 있습니다.

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

다음 aspnet_regiis.exe 예제에서는 <connectionStrings> 컴퓨터 수준 키와 함께 DPAPI 공급자를 사용하여 섹션을 암호화합니다.

aspnet_regiis.exe -pef
"connectionStrings" "C:\Websites\ASPNET_Data_Tutorial_73_VB"
-prov "DataProtectionConfigurationProvider"

마찬가지로 aspnet_regiis.exe 명령줄 도구를 사용하여 구성 섹션의 암호를 해독할 수 있습니다. 스위치를 -pef 사용하는 대신 (또는 대신 -pe을 사용)을 사용합니다-pd.-pdf 또한 암호를 해독할 때는 공급자 이름이 필요하지 않습니다.

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

참고

컴퓨터와 관련된 키를 사용하는 DPAPI 공급자를 사용하므로 웹 페이지가 제공되는 동일한 컴퓨터에서 실행 aspnet_regiis.exe 해야 합니다. 예를 들어 로컬 개발 컴퓨터에서 이 명령줄 프로그램을 실행한 다음 암호화된 Web.config 파일을 프로덕션 서버에 업로드하는 경우 프로덕션 서버는 개발 컴퓨터와 관련된 키를 사용하여 암호화되었으므로 연결 문자열 정보의 암호를 해독할 수 없습니다. RSA 키를 다른 컴퓨터로 내보낼 수 있으므로 RSA 공급자에는 이 제한이 없습니다.

데이터베이스 인증 옵션 이해

애플리케이션이 Microsoft SQL Server 데이터베이스에 대해 , INSERT, UPDATE또는 DELETE 쿼리를 실행SELECT하려면 먼저 데이터베이스에서 요청자를 식별해야 합니다. 이 프로세스를 인증이라고 하며 SQL Server 두 가지 인증 방법을 제공합니다.

  • Windows 인증 - 애플리케이션이 실행되는 프로세스는 데이터베이스와 통신하는 데 사용됩니다. Visual Studio 2005의 ASP.NET 개발 서버를 통해 ASP.NET 애플리케이션을 실행하는 경우 ASP.NET 애플리케이션은 현재 로그온한 사용자의 ID를 가정합니다. Microsoft IIS(인터넷 정보 서버)의 ASP.NET 애플리케이션의 경우 ASP.NET 애플리케이션은 일반적으로 또는 domainName``\NETWORK SERVICEdomainName``\MachineName ID를 가정하지만 사용자 지정할 수 있습니다.
  • SQL 인증 - 사용자 ID 및 암호 값은 인증을 위한 자격 증명으로 제공됩니다. SQL 인증을 사용하면 사용자 ID 및 암호가 연결 문자열 제공됩니다.

Windows 인증 더 안전하기 때문에 SQL 인증보다 선호됩니다. Windows 인증 연결 문자열 사용자 이름과 암호에서 자유로워지고 웹 서버와 데이터베이스 서버가 서로 다른 두 컴퓨터에 있는 경우 자격 증명은 네트워크를 통해 일반 텍스트로 전송되지 않습니다. 그러나 SQL 인증을 사용하면 인증 자격 증명이 연결 문자열 하드 코딩되고 웹 서버에서 데이터베이스 서버로 일반 텍스트로 전송됩니다.

이러한 자습서는 Windows 인증 사용했습니다. 연결 문자열 검사하여 사용 중인 인증 모드를 알 수 있습니다. 자습서의 Web.config 연결 문자열 다음과 같습니다.

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

통합 보안=True이고 사용자 이름 및 암호가 부족하면 Windows 인증 사용되고 있음을 나타냅니다. 일부 연결 문자열에서는 통합 보안=True 대신 Trusted Connection=Yes 또는 Integrated Security=SSPI라는 용어가 사용되지만 세 가지 모두 Windows 인증 사용을 나타냅니다.

다음 예제에서는 SQL 인증을 사용하는 연결 문자열 보여줍니다. 연결 문자열 내에 포함된 자격 증명을 확인합니다.

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

공격자가 애플리케이션의 Web.config 파일을 볼 수 있다고 상상해 보세요. SQL 인증을 사용하여 인터넷을 통해 액세스할 수 있는 데이터베이스에 연결하는 경우 공격자는 이 연결 문자열 사용하여 SQL Management Studio 또는 자체 웹 사이트의 ASP.NET 페이지에서 데이터베이스에 연결할 수 있습니다. 이 위협을 완화하려면 보호된 구성 시스템을 사용하여 연결 문자열 정보를 Web.config 암호화합니다.

참고

SQL Server 사용할 수 있는 다양한 유형의 인증에 대한 자세한 내용은 보안 ASP.NET 애플리케이션 빌드: 인증, 권한 부여 및 보안 통신을 참조하세요. Windows와 SQL 인증 구문의 차이점을 보여 주는 추가 연결 문자열 예제는 ConnectionStrings.com 참조하세요.

요약

기본적으로 ASP.NET 애플리케이션에 확장이 있는 파일 .config 은 브라우저를 통해 액세스할 수 없습니다. 이러한 형식의 파일은 데이터베이스 연결 문자열, 사용자 이름 및 암호 등과 같은 중요한 정보를 포함할 수 있으므로 반환되지 않습니다. .NET 2.0의 보호된 구성 시스템은 지정된 구성 섹션을 암호화할 수 있도록 하여 중요한 정보를 더욱 보호하는 데 도움이 됩니다. RSA 알고리즘을 사용하는 공급자와 DPAPI(Windows Data Protection API)를 사용하는 두 가지 기본 제공 보호 구성 공급자가 있습니다.

이 자습서에서는 DPAPI 공급자를 사용하여 구성 설정을 암호화하고 암호를 해독하는 방법을 살펴보았습니다. 이는 2단계에서 확인한 것처럼 프로그래밍 방식으로 수행할 수 있을 뿐만 아니라 3단계에서 설명한 명령줄 도구를 통해 aspnet_regiis.exe 수행할 수 있습니다. 사용자 수준 키를 사용하거나 RSA 공급자를 대신 사용하는 방법에 대한 자세한 내용은 추가 읽기 섹션의 리소스를 참조하세요.

행복한 프로그래밍!

추가 정보

이 자습서에서 설명하는 topics 대한 자세한 내용은 다음 리소스를 참조하세요.

저자 정보

7개의 ASP/ASP.NET 책의 저자이자 4GuysFromRolla.com 창립자인 Scott Mitchell은 1998년부터 Microsoft 웹 기술을 연구해 왔습니다. Scott은 독립 컨설턴트, 트레이너 및 작가로 일합니다. 그의 최신 책은 샘스 자신을 가르친다 ASP.NET 2.0 24 시간. 그는 에서 찾을 수있는 그의 블로그를 통해 또는 에 mitchell@4GuysFromRolla.comhttp://ScottOnWriting.NET도달 할 수 있습니다.

특별 감사

이 자습서 시리즈는 많은 유용한 검토자가 검토했습니다. 이 자습서의 수석 검토자는 테레사 머피와 랜디 슈미트였습니다. 예정된 MSDN 문서를 검토하시겠습니까? 그렇다면 에 줄을 놓습니다 mitchell@4GuysFromRolla.com.