ASP.NET 사이트 탐색 보안

Visual Studio 2010

업데이트: 2007년 11월

ASP.NET 사이트 탐색 기능을 사용하면 웹 사이트의 모든 페이지에 대한 링크를 중앙 위치에 저장하여 관리할 수 있습니다. 그런 다음 특정 웹 서버 컨트롤을 포함하여 각 페이지에 목록 또는 탐색 메뉴 형태로 이러한 링크를 렌더링할 수 있습니다.

ASP.NET 사이트 탐색 기능은 일반적으로 SiteMapPath, SiteMapDataSource, TreeViewMenu와 같은 탐색 컨트롤에 사용되거나 SiteMapSiteMapProvider 클래스에서 프로그래밍 방식으로 사용됩니다. 이 항목에서는 탐색 기능의 보안을 향상시키는 방법에 대해 설명합니다.

유용한 코딩 및 구성 방법을 적용하여 응용 프로그램의 보안을 향상시킬 수 있지만 Microsoft Windows와 IIS(인터넷 정보 서비스)에 대한 최신 보안 업데이트 및 Microsoft SQL Server나 기타 멤버 자격 데이터 소스에 대한 업데이트를 사용하여 응용 프로그램 서버를 항상 최신 상태로 유지하는 것도 중요합니다. 자세한 내용은 Windows Update 웹 사이트를 참조하십시오.

안전한 코드 작성 및 응용 프로그램 보안을 위한 유용한 정보를 보려면 Michael Howard와 David LeBlanc이 공동 저술한 "Writing Secure Code" 및 Microsoft Patterns and Practices 웹 사이트에 제공된 지침을 참조하십시오. 또한 웹 응용 프로그램의 기본 보안에 대한 유용한 정보의 내용도 참조할 수 있습니다.

ASP.NET 사이트 탐색 기능은 기본적으로 사용됩니다. Web.config 구성 파일에서 siteMap 요소의 enabled 특성을 false로 설정하면 이 기능을 해제할 수 있습니다. 다음 단원에서는 Web.config 파일에서 탐색 관련 데이터의 보안을 설정하는 데 대해 설명합니다. 탐색 구성 설정 및 기본값에 대한 내용은 siteMap 요소(ASP.NET 설정 스키마)를 참조하십시오.

구성 값 보안

기본 ASP.NET 사이트 맵 공급자를 사용할 경우에는 Web.config 파일에 포함된 탐색 구성 설정의 보안을 유지할 필요가 없습니다. 그러나 데이터베이스를 사용하는 사용자 지정 사이트 맵 공급자를 구현하고 구성 파일에 데이터베이스 연결 문자열을 저장할 경우에는 데이터 액세스 보안의 권장 사항을 따라 연결 문자열을 암호화해야 합니다.

호스팅된 환경에서는 다른 사람이 다른 사이트 맵 또는 사이트 맵 공급자를 사용하기 위해 사이트를 다시 구성하지 못하도록 구성 파일에서 siteMap 요소(ASP.NET 설정 스키마) 요소에 대한 재정의 권한을 거부해야 합니다. 자세한 내용은 구성 설정 잠금을 참조하십시오. 또한 호스팅된 환경에서의 ASP.NET 응용 프로그램 보안의 내용도 참조할 수 있습니다.

URL 매핑

Web.config 파일의 urlMappings 요소(ASP.NET 설정 스키마) 요소를 사용하여 구성 파일에서 URL을 약식 URL에 매핑할 수 있습니다. ASP.NET에서는 ~/filename.aspx와 같이 응용 프로그램에 대해 상대적인 구문만 허용됩니다. 즉, ASP.NET에서는 매핑된 URL을 사용하여 응용 프로그램 외부의 페이지를 가리킬 수 없습니다. 이렇게 하면 호스팅된 환경에서 ISP 클라이언트가 응용 프로그램 외부의 페이지를 볼 수 없습니다.

기본적으로 ASP.NET은 .sitemap처럼 알려진 확장명을 사용하는 파일을 클라이언트가 다운로드하지 못하도록 구성되어 있습니다. 데이터를 보호하려면 확장명이 .sitemap이 아닌 사용자 지정 사이트 맵 데이터 파일을 App_Data 폴더에 저장하고 적절한 ACL(액세스 제어 목록)을 적용하십시오. 예를 들어 Windows 2000 또는 Windows XP에서는 ASP.NET 프로세스 계정에 읽기 전용 권한을 부여하고 Windows 2003에서는 Network Service 계정에 읽기 전용 권한을 부여합니다. 자세한 내용은 ASP.NET 필수 ACL(액세스 제어 목록)을 참조하십시오.

ASP.NET 사이트 탐색 기능은 응용 프로그램의 디렉터리 구조에 있는 사이트 맵 파일만 로드합니다. 이렇게 하면 호스트된 환경에서 다른 응용 프로그램이 사이트 맵 데이터를 로드할 수 없습니다.

ASP.NET 사이트 탐색 기능을 수행하는 경우 응용 프로그램의 디렉터리 구조 외부에 있는 파일에 액세스할 수 없습니다. 사이트 맵에 응용 프로그램 외부의 다른 사이트 맵 파일을 참조하는 노드가 포함되어 있으면 예외가 발생합니다. 이 예외에는 SiteMapNode에 지정된 경로가 응용 프로그램 범위 외부에 있는 것으로 표시되지만 경로가 유효한지 여부는 나타나지 않습니다. 즉, 다른 사람이 서버에서 올바른 파일 경로를 검색하기 위해 ASP.NET 사이트 탐색 기능을 사용할 수 없습니다.

데이터베이스를 사용하는 사용자 지정 사이트 맵 공급자를 구현하는 경우 사이트 맵 데이터를 보호할 수 있는 방법에 대한 내용은 데이터 액세스 보안을 참조하십시오.

사이트 맵 로드 프로세스

기본 ASP.NET 사이트 맵 공급자는 사이트 맵 데이터를 XML 문서로 로드하고 응용 프로그램을 시작할 때 이를 정적 데이터로 캐시합니다. 지나치게 큰 사이트 맵 파일을 로드할 때 메모리와 CPU 기능이 많이 소모될 수 있습니다. 호스팅된 환경에서 고객이 사이트를 만들 수 있는 사이트 맵의 크기를 제한하십시오. 이렇게 하면 서비스 거부 공격을 방지할 수 있습니다.

ASP.NET 사이트 탐색 기능은 파일 알림을 통해 탐색 데이터를 최신 상태로 유지합니다. 사이트 맵 파일이 변경되면 ASP.NET은 사이트 맵 데이터를 다시 로드합니다. 그러나 사이트 탐색 구조를 구성하는 자식 사이트 맵에서 쓰기 권한이 부여된 사용자가 사이트 맵 파일이 변경될 때마다 데이터가 다시 로드된다는 사실을 모르고 있으면 문제가 발생할 수 있습니다. 모든 사이트 맵 파일에 대해 제한적인 액세스를 설정해야 합니다. 대상 위치에 대한 파일 업데이트 권한이 있는 사용자를 기준으로 사용자 그룹을 정의한 다음 사이트 맵 파일에 대한 권한을 개별 사용자 그룹으로 설정합니다.

ASP.NET 사이트 탐색 기능을 사용하면 역할별로 개별 사이트 맵 노드의 보안을 유지할 수 있습니다. 특정 사용자에게 사이트의 탐색 구조 일부를 표시하지 않으려면 ASP.NET 보안 트리밍을 설정하면 됩니다. 이 기능이 설정되면 ASP.NET에서는 URL 권한 부여를 확인하고 사이트 맵 노드에 나열된 파일에 대한 파일 액세스 권한도 선택적으로 확인합니다. ASP.NET에는 사용자가 액세스할 수 있는 파일에 대한 링크만 표시됩니다. 제한된 파일에 대한 링크를 모든 사용자가 볼 수 있게 하려면 해당 사이트 맵 노드에서 roles 특성을 모든 클라이언트가 링크를 볼 수 있는 별표(*) 와일드카드 문자로 설정합니다. 자세한 내용은 ASP.NET 사이트 맵 보안 트리밍을 참조하십시오.

사이트 맵에 외부 URL 포함

사이트 맵에서 ASP.NET 응용 프로그램 외부의 URL을 참조할 수 있습니다. 그러나 ASP.NET에서는 응용 프로그램 외부의 URL에 대한 액세스를 테스트할 수 없습니다. 예를 들어 http://www.microsoft.com에 해당하는 사이트 맵 노드를 만들고 보안 트리밍 기능을 설정하는 경우, ASP.NET에서 외부 URL에 대한 액세스 권한을 테스트할 수 없으므로 클라이언트가 이 하이퍼링크를 볼 수 없습니다. 보안 트리밍 기능을 설정하고 외부 URL에 해당하는 사이트 맵 노드가 있는 경우에는 이러한 노드에서 roles 특성을 별표(*)로 설정합니다. 그러면 ASP.NET에서 외부 링크에 대한 액세스를 허용할 수 없더라도 모든 클라이언트가 링크를 볼 수 있습니다.

사이트 탐색 클래스는 컴퓨터에서 실행 중인 모든 코드에서 공개적으로 사용할 수 있습니다. 사이트 탐색 클래스는 최소 신뢰 수준으로 실행됩니다. 그러나 ASP.NET에서는 기본 사이트 맵 공급자 XmlSiteMapProvider를 사용하여 사이트 맵 파일을 열 때 파일 I/O 작업을 사용해야 하므로 사이트 맵 데이터를 로드하려면 Low(낮은) 신뢰 수준이 필요합니다. 선택적으로 이러한 제한이 적용되지 않은 사용자 지정 사이트 맵 공급자를 개발할 수도 있습니다.

자세한 내용은 ASP.NET 신뢰 수준 및 정책 파일ASP.NET 사이트 맵 공급자 구현을 참조하십시오.

사용자 지정 사이트 맵 공급자를 구현하는 경우 유용한 보안 정보를 참조하여 공급자를 충분히 검토해야 합니다. 이 단계는 사용자 지정 사이트 맵 공급자를 제대로 구현하지 않아 정보가 누설되거나 안전하지 않은 기본 구성 설정이 포함될 수 있는 호스팅 시나리오에서 특히 중요합니다. SQL 삽입 공격과 같은 공격이 발생하지 않도록 최선의 보안 방법을 따르십시오. 예를 들어 매개 변수 입력을 항상 확인해야 합니다.

데이터베이스 보안에 대한 내용은 데이터 액세스 보안을 참조하십시오. 또한 호스팅된 환경에서의 ASP.NET 응용 프로그램 보안의 내용도 참조할 수 있습니다.

다음 단원에서는 예기치 않은 오류 메시지 및 이벤트에 의해 노출되는 보안 위험을 줄일 수 있는 방법에 대해 설명합니다.

예외 메시지

ASP.NET 사이트 탐색 기능에서 throw하는 예외는 권한이 부여된 정보를 노출하지 않습니다. 웹 응용 프로그램의 사용자 지정 클래스에 대해 잘못된 입력 및 요청이 있는지 검토하고 테스트하여 예외가 발생할 때 권한이 부여된 정보가 노출되지 않도록 해야 합니다.

오류 메시지

중요한 정보가 원하지 않는 소스로 노출되지 않게 하려면 응용 프로그램에 대해 사용자 지정 오류를 설정하거나, 클라이언트가 웹 서버일 경우에만 자세한 오류 메시지를 표시합니다. 자세한 내용은 customErrors 요소(ASP.NET 설정 스키마)를 참조하십시오.

이벤트 로그

컴퓨터에서 Windows Server 2003을 실행 중인 경우 이벤트 로그를 보호하여 응용 프로그램의 보안을 향상시킬 수 있습니다. 또한 이벤트 로그의 크기, 보존 등과 관련된 매개 변수를 설정하여 이벤트 로그에 대해 간접적인 서비스 거부 공격을 방지할 수 있습니다. 기본적으로 Administrators 보안 그룹의 멤버만 이벤트 로그를 볼 수 있습니다. 이벤트 로그를 구성하는 데 대한 자세한 내용을 보려면 Windows 도움말 및 지원에서 "이벤트 뷰어"를 검색하십시오.

바이러스 검사 프로그램 같은 도구에서 사이트 맵 파일을 수정하지 않도록 구성해야 합니다. ASP.NET 사이트 탐색 기능은 파일 알림을 통해 탐색 데이터를 최신 상태로 유지하므로 사이트 맵 파일을 수정하도록 구성하면 탐색 데이터가 불필요하게 다시 로드됩니다.

표시: