연결 문자열 및 기타 구성 정보 보호(C#)
작성자 : Scott Mitchell
ASP.NET 애플리케이션은 일반적으로 구성 정보를 Web.config 파일에 저장합니다. 이 정보 중 일부는 민감하며 보호를 보증합니다. 기본적으로 이 파일은 웹 사이트 방문자에게 제공되지 않지만 관리자 또는 해커는 웹 서버의 파일 시스템에 액세스하고 파일의 내용을 볼 수 있습니다. 이 자습서에서는 ASP.NET 2.0을 통해 Web.config 파일의 섹션을 암호화하여 중요한 정보를 보호할 수 있다는 것을 알아봅니다.
소개
ASP.NET 애플리케이션에 대한 구성 정보는 일반적으로 라는 Web.config
XML 파일에 저장됩니다. 이러한 자습서를 진행하는 동안 몇 번 업데이트 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
수 없습니다.
그림 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 두 개의 보호된 구성 공급자와 함께 제공됩니다.
RSAProtectedConfigurationProvider
- 암호화 및 암호 해독에 비대칭 RSA 알고리즘 을 사용합니다.DPAPIProtectedConfigurationProvider
- 암호화 및 암호 해독에 Windows DPAPI(Data Protection API) 를 사용합니다.
보호된 구성 시스템은 공급자 디자인 패턴을 구현하므로 사용자 고유의 보호된 구성 공급자를 만들어 애플리케이션에 연결할 수 있습니다. 이 프로세스에 대한 자세한 내용은 보호된 구성 공급자 구현 을 참조하세요.
RSA 및 DPAPI 공급자는 암호화 및 암호 해독 루틴에 키를 사용하며 이러한 키는 컴퓨터 또는 사용자 수준에 저장할 수 있습니다. 컴퓨터 수준 키는 웹 애플리케이션이 자체 전용 서버에서 실행되거나 암호화된 정보를 공유해야 하는 서버에 여러 애플리케이션이 있는 시나리오에 적합합니다. 사용자 수준 키는 동일한 서버의 다른 애플리케이션이 애플리케이션의 보호된 구성 섹션을 해독할 수 없어야 하는 공유 호스팅 환경에서 보다 안전한 옵션입니다.
이 자습서에서는 DPAPI 공급자 및 컴퓨터 수준 키를 사용합니다. 특히 보호된 구성 시스템을 사용하여 대부분의 Web.config
섹션을 <connectionStrings>
암호화할 수 있지만 의 Web.config
섹션 암호화를 살펴보겠습니다. 사용자 수준 키를 사용하거나 RSA 공급자를 사용하는 방법에 대한 자세한 내용은 이 자습서의 끝에 있는 추가 읽기 섹션의 리소스를 참조하세요.
참고
및 공급자는 RSAProtectedConfigurationProvider
각각 공급자 이름 RsaProtectedConfigurationProvider
및 DataProtectionConfigurationProvider
를 사용하여 파일에 등록 machine.config
됩니다.DPAPIProtectedConfigurationProvider
구성 정보를 암호화하거나 암호 해독할 때 실제 형식 이름( 및 DPAPIProtectedConfigurationProvider
)이 아닌 적절한 공급자 이름(RsaProtectedConfigurationProvider
RSAProtectedConfigurationProvider
또는 DataProtectionConfigurationProvider
)을 제공해야 합니다. 폴더에서 machine.config
$WINDOWS$\Microsoft.NET\Framework\version\CONFIG
파일을 찾을 수 있습니다.
2단계: 프로그래밍 방식으로 구성 섹션 암호화 및 암호 해독
몇 줄의 코드를 사용하면 지정된 공급자를 사용하여 특정 구성 섹션을 암호화하거나 암호 해독할 수 있습니다. 잠시 후에 볼 수 있듯이 코드는 프로그래밍 방식으로 적절한 구성 섹션을 참조하고, 또는 UnprotectSection
메서드를 ProtectSection
호출한 다음, 메서드를 호출 Save
하여 변경 내용을 유지해야 합니다. 또한 .NET Framework 구성 정보를 암호화하고 암호를 해독할 수 있는 유용한 명령줄 유틸리티가 포함되어 있습니다. 3단계에서 이 명령줄 유틸리티를 살펴보겠습니다.
프로그래밍 방식으로 구성 정보를 보호하는 방법을 설명하기 위해 의 섹션Web.config
을 암호화 및 암호 해독하기 <connectionStrings>
위한 단추가 포함된 ASP.NET 페이지를 만들어 보겠습니다.
먼저 폴더에서 EncryptingConfigSections.aspx
AdvancedDAL
페이지를 엽니다. 도구 상자에서 Designer TextBox 컨트롤을 끌어 속성을 ID
WebConfigContents
로, 속성을 TextMode
MultiLine
로Width
, 및 속성을 각각 95%와 Rows
15로 설정합니다. 이 TextBox 컨트롤은 콘텐츠가 Web.config
암호화되었는지 여부를 빠르게 확인할 수 있도록 하는 내용을 표시합니다. 물론 실제 애플리케이션에서는 의 Web.config
내용을 표시하지 않을 것입니다.
TextBox 아래에 및 DecryptConnStrings
라는 EncryptConnStrings
두 개의 Button 컨트롤을 추가합니다. 텍스트 속성을 연결 문자열 암호화 및 연결 문자열 암호 해독으로 설정합니다.
이 시점에서 화면은 그림 2와 유사하게 표시됩니다.
그림 2: 페이지에 TextBox 및 두 개의 단추 웹 컨트롤 추가(전체 크기 이미지를 보려면 클릭)
다음으로, 페이지가 처음 로드될 때 TextBox에서 WebConfigContents
의 Web.config
콘텐츠를 로드하고 표시하는 코드를 작성해야 합니다. 페이지의 코드 숨김 클래스에 다음 코드를 추가합니다. 이 코드는 라는 DisplayWebConfig
메서드를 추가하고 가 인 Page_Load
경우 Page.IsPostBack
false
이벤트 처리기에서 호출합니다.
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.
앞에 를 추가 using
System.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 참조).
그림 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>
보여 주듯이 이제 정보가 암호화됩니다.
그림 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 SERVICE
의domainName``\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 대한 자세한 내용은 다음 리소스를 참조하세요.
- 보안 ASP.NET 애플리케이션 빌드: 인증, 권한 부여 및 보안 통신
- ASP.NET 2.0 애플리케이션에서 구성 정보 암호화
Web.config
ASP.NET 2.0의 값 암호화- 방법: DPAPI를 사용하여 ASP.NET 2.0에서 구성 섹션 암호화
- 방법: RSA를 사용하여 ASP.NET 2.0에서 구성 섹션 암호화
- .NET 2.0의 구성 API
- Windows 데이터 보호
저자 정보
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.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기