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

작성자 : Scott Mitchell

PDF 다운로드

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

소개

ASP.NET 애플리케이션에 대한 구성 정보는 일반적으로 라는 Web.configXML 파일에 저장됩니다. 이러한 자습서를 진행하는 동안 몇 번 업데이트 Web.config 했습니다. 예를 들어 첫 번째 자습서에서 형식화된 DataSet을 만들 Northwind 때 연결 문자열 정보가 섹션에 <connectionStrings> 자동으로 추가 Web.config 되었습니다. 나중에 마스터 페이지 및 사이트 탐색 자습서에서 프로젝트의 모든 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 각각 공급자 이름 RsaProtectedConfigurationProviderDataProtectionConfigurationProvider를 사용하여 파일에 등록 machine.config 됩니다.DPAPIProtectedConfigurationProvider 구성 정보를 암호화하거나 암호 해독할 때 실제 형식 이름( 및 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 페이지를 엽니다. 도구 상자에서 Designer TextBox 컨트롤을 끌어 속성을 IDWebConfigContents로, 속성을 TextModeMultiLineWidth, 및 속성을 각각 95%와 Rows 15로 설정합니다. 이 TextBox 컨트롤은 콘텐츠가 Web.config 암호화되었는지 여부를 빠르게 확인할 수 있도록 하는 내용을 표시합니다. 물론 실제 애플리케이션에서는 의 Web.config내용을 표시하지 않을 것입니다.

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

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

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

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

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

protected void Page_Load(object sender, EventArgs e)
{
    // On the first page visit, call DisplayWebConfig method
    if (!Page.IsPostBack)
        DisplayWebConfig();
}
private void DisplayWebConfig()
{
    // Reads in the contents of Web.config and displays them in the TextBox
    StreamReader webConfigStream = 
        File.OpenText(Path.Combine(Request.PhysicalApplicationPath, "Web.config"));
    string configContents = webConfigStream.ReadToEnd();
    webConfigStream.Close();
    WebConfigContents.Text = configContents;
}

DisplayWebConfig 메서드는 클래스를 File 사용하여 애플리케이션의 Web.config 파일을 열고, 클래스를 StreamReader 사용하여 해당 내용을 문자열로 읽고Path, 클래스를 사용하여 파일에 대한 Web.config 실제 경로를 생성합니다. 이러한 세 클래스는 모두 네임스페이System.IO스에 있습니다. 따라서 코드 숨김 클래스의 맨 위에 문을 추가하거나 이러한 클래스 이름 System.IO. 앞에 를 추가 usingSystem.IO 해야 합니다.

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

protected void EncryptConnStrings_Click(object sender, EventArgs e)
{
    // Get configuration information about Web.config
    Configuration config = 
        WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
    // Let's work with the <connectionStrings> section
    ConfigurationSection connectionStrings = config.GetSection("connectionStrings");
    if (connectionStrings != null)
        // Only encrypt the section if it is not already protected
        if (!connectionStrings.SectionInformation.IsProtected)
        {
            // Encrypt the <connectionStrings> section using the 
            // DataProtectionConfigurationProvider provider
            connectionStrings.SectionInformation.ProtectSection(
                "DataProtectionConfigurationProvider");
            config.Save();
            
            // Refresh the Web.config display
            DisplayWebConfig();
        }
}
protected void DecryptConnStrings_Click(object sender, EventArgs e)
{
    // Get configuration information about Web.config
    Configuration config = 
        WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
    // Let's work with the <connectionStrings> section
    ConfigurationSection connectionStrings = 
        config.GetSection("connectionStrings");
    if (connectionStrings != null)
        // Only decrypt the section if it is protected
        if (connectionStrings.SectionInformation.IsProtected)
        {
            // Decrypt the <connectionStrings> section
            connectionStrings.SectionInformation.UnprotectSection();
            config.Save();
            // Refresh the Web.config display
            DisplayWebConfig();
        }
}

두 이벤트 처리기에서 사용되는 코드는 거의 동일합니다. 둘 다 클래스의 OpenWebConfiguration 메서드를 통해 현재 애플리케이션의 Web.config 파일에 대한 정보를 가져오는 것으로 WebConfigurationManager 시작합니다. 이 메서드는 지정된 가상 경로에 대한 웹 구성 파일을 반환합니다. 다음으로, 개체를 Web.config 반환하는 클래스의 메서드를 Configuration 통해 파일 <connectionStrings>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 통해 페이지를 방문하여 테스트합니다. 처음에는 일반 텍스트로 표시된 섹션의 내용을 Web.config<connectionStrings> 나열하는 페이지가 표시됩니다(그림 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_CS"
-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 인증을 사용하는 연결 문자열 보여줍니다. $CREDENTIAL_PLACEHOLDER$ 는 암호 키-값 쌍의 자리 표시자입니다. 자격 증명은 연결 문자열 내에 포함됩니다.

Server=serverName; Database=Northwind; uid=userID; $CREDENTIAL_PLACEHOLDER$

공격자가 애플리케이션의 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.