다음을 통해 공유


웹 파트 페이지 보안

업데이트: 2007년 11월

웹 파트는 최종 사용자가 웹 페이지를 수정하거나 개인 설정할 수 있도록 ASP.NET에서 제공하는 새로운 기능입니다. 웹 페이지를 개인 설정하면 웹 응용 프로그램 사용자에게 매우 유용하지만 개발자가 숙지해야 할 보안 문제도 있습니다.

웹 파트 보안 문제

웹 파트는 ASP.NET의 기능이고 웹 파트 컨트롤은 확장된 ASP.NET 서버 컨트롤이므로 웹 파트 페이지에서는 ASP.NET 페이지와 동일한 보안 문제가 발생할 수 있습니다. 웹 파트 컨트롤을 사용하는 페이지가 포함된 웹 응용 프로그램은 실제로 특별한 ASP.NET 응용 프로그램 종류 중 하나이며 웹 파트를 사용하는 응용 프로그램은 일반 ASP.NET 응용 프로그램을 실행할 수 있는 모든 신뢰 수준에서 실행할 수 있습니다. ASP.NET 웹 사이트 보안에 대한 일반적인 내용은 ASP.NET 웹 사이트 보안을 참조하십시오. 그러나 웹 파트에는 일반적인 ASP.NET 페이지와 달리 고유의 보안 문제가 몇 가지 있습니다. 다음 단원에서 이러한 보안 문제에 대해 설명합니다.

컨트롤 데이터 가져오기

웹 파트 기능 중에서 가져오기 기능이 보안상 가장 위험합니다. 사용자는 이 기능을 통해 서버 컨트롤에 대한 상태 및 속성 데이터가 포함된 XML 설명 파일을 가져올 수 있습니다. 이때 컨트롤의 어셈블리 파일이 웹 서버에 이미 있어야 합니다. 컨트롤 데이터를 가져오면 사용자는 데이터를 공유하고 복합 컨트롤을 쉽게 구성할 수 있습니다. 그러나 설명 파일에 악의적인 데이터가 있을 수 있습니다. 예를 들어 다른 사용자가 악의적인 스크립트 코드를 설명 파일에 문자열 속성의 값으로 배치한 경우 사용자가 설명 파일을 가져오고 참조된 서버 컨트롤을 웹 페이지에 추가하면 해당 스크립트가 실행될 수 있습니다. 악의적인 데이터가 포함된 설명 파일을 가져올 때 발생할 수 있는 문제를 최소화하려면 문자열 형식의 속성이 포함된 서버 컨트롤에서 항상 속성 데이터를 인코딩해야 합니다. 설명 파일을 통해 형식을 가져오는 경우에도 보안 문제가 발생할 수 있습니다. 자세한 내용은 웹 파트 컨트롤 설명 파일을 참조하십시오. 악의가 있는 사용자가 많은 어셈블리를 AppDomain으로 로드하는 요청을 전송하여 메모리 사용량이 크게 증가할 수 있습니다. 가져오기와 관련된 보안 문제를 방지하려면 가져오기를 구현하는 서버 컨트롤을 사용하지 않는 방법을 통해 이 기능을 완전히 해제하면 됩니다. 또는 컨트롤에 액세스할 수 있는 사용자를 제한할 수 있습니다. 예를 들어 역할 관리를 사용할 수 있습니다. 관리자 역할을 수행하는 사용자가 있는 경우 해당 사용자에 대한 페이지에 프로그래밍 방식으로 ImportCatalogPart를 추가하면 됩니다. 컨트롤에 대한 자세한 내용은 ImportCatalogPart 클래스의 참조 항목을 참조하십시오.

컨트롤 데이터 내보내기

내보내기 기능은 중요한 데이터를 노출할 수 있으므로 가져오기 기능과 거의 비슷한 보안 문제를 포함합니다. 사용자는 내보내기를 통해 특정 컨트롤에 대한 속성 및 상태 데이터를 XML 설명 파일에 저장할 수 있습니다. 이 파일은 가져오기 기능을 사용하여 가져올 수 있는 파일과 같습니다. 이때 가장 큰 문제는 사용자가 응용 프로그램의 중요한 데이터를 설명 파일로 내보낼 수 있다는 점입니다. 설명 파일은 적절한 권한을 가진 모든 사람이 읽을 수 있는 간단한 텍스트 파일입니다. 내보내기는 기본적으로 ASP.NET에서 사용하지 않도록 설정되어 있으므로 내보내기 기능이 필요 없는 경우에는 이러한 문제를 무시할 수 있습니다. 이 옵션이 가장 안전합니다.

내보내기 기능을 사용할 경우에는 내보낼 수 있는 속성을 결정하는 옵션에 대해 잘 알고 있어야 합니다. WebPart 컨트롤 또는 WebPartZone 영역에서 사용할 서버 컨트롤을 만드는 경우에는 내보낼 수 있도록 설정할 각 공용 속성에 대해 Personalizable 메타데이터 특성을 추가할 수 있습니다. 이렇게 하면 내보내기를 사용하는 경우 내보낼 수 있는 속성을 설정할 수 있으며 사용자에게 메시지 상자를 표시하여 데이터 내보내기 작업이 수행된다는 것을 알려 줄 수 있습니다. IsSensitive는 Personalizable 특성의 매개 변수 중 하나입니다. 이 부울 매개 변수는 특정한 경우에만 속성을 내보내려는 경우에 유용합니다. 자세한 내용과 예제를 보려면 ExportMode 속성에 대한 참조 항목을 참조하십시오.

개인 설정 세부 내용 이해

웹 파트 개인 설정은 개인 설정된 페이지에 브라우저 세션 간의 설정이 유지되도록 사용자가 자신이 원하는 대로 웹 페이지를 수정하고 설정을 장기 저장소에 저장할 수 있는 기능입니다. 대부분의 웹 파트 기능을 사용하려면 개인 설정이 필요하므로 ASP.NET 웹 사이트에서는 기본적으로 개인 설정을 사용하도록 되어 있습니다. 그러나 이 기능은 웹 파트 컨트롤이 포함된 페이지에서만 사용됩니다. 개인 설정은 매우 강력한 기능이므로 보안상 약간 위험할 수도 있습니다. 사용자는 실제 레이아웃, 모양 및 웹 페이지의 내용과 컨트롤을 수정할 수 있습니다. 개인 설정 데이터는 데이터베이스에 저장되고 페이지를 렌더링하는 데 사용되므로 사이트 내용과 관련된 악의적인 작업이 발생할 가능성이 높습니다. shared personalization 범위에 액세스할 수 있는 사용자는 모든 사용자에 대해 페이지가 나타나는 방식도 변경할 수 있습니다.

웹 파트 기능을 사용하지만 개인 설정이 필요하지 않은 특정 페이지(예: 포털 사이트의 공통 페이지)가 있는 경우에는 개인 설정을 사용하지 않는 것이 좋습니다. 이렇게 하면 성능이 향상되고 사이트가 보안 위험에 노출될 가능성이 줄어듭니다. 자세한 내용은 방법: 웹 파트 개인 설정 비활성화를 참조하십시오.

개인 설정을 위해 사용자 인증

개인 설정 기능을 사용하려면 인증된 사용자가 필요합니다. 익명 사용자에 대해 개인 설정 기능을 사용하도록 설정할 수 없습니다. 즉, 개인 설정 및 웹 파트 기능을 완벽하게 사용하려면 웹 사이트에서 Windows 인증 또는 폼 기반 인증을 사용해야 합니다. 인증 옵션에 대한 내용은 ASP.NET 웹 응용 프로그램의 기본 보안 방법를 참조하십시오. 폼 인증을 사용하는 새로운 멤버 자격 기능을 통해 사이트를 설정하려면 멤버 자격을 사용하여 사용자 관리를 참조하십시오.

공유 개인 설정에 최소 액세스 권한 부여

웹 파트 개인 설정의 변경 내용은 항상 특정 사용자 범위에 적용됩니다. 사용자 범위에서 변경된 내용은 해당 내용을 직접 변경한 사용자만 볼 수 있고 공유 범위에서 변경된 내용은 모든 사용자가 볼 수 있습니다. 공유 개인 설정 범위는 관리자 역할이 설정된 사용자가 페이지에서 변경하는 내용을 사이트의 모든 사용자에게 적용해야 할 경우에 사용됩니다. 기본적으로 모든 사용자는 공유 범위에 액세스할 수 없습니다. 선택된 사용자에게만 액세스 권한이 부여되어야 하며 이는 웹 사이트의 구성 파일에서 명시적으로 수행해야 합니다. 자세한 내용은 방법: 웹 파트 페이지의 공유 개인 설정 활성화를 참조하십시오.

테스트를 마친 신뢰할 수 있는 컨트롤 사용

웹 파트에서는 페이지에 새 서버 컨트롤을 추가하는 기능처럼 강력한 기능을 사용자에게 제공하므로 개발자는 웹 파트 응용 프로그램에서 사용하는 서버 컨트롤을 선택할 때 주의해야 합니다. 서버 컨트롤, 특히 타사 또는 공급업체에서 제공하는 서버 컨트롤을 신중하게 검토하고 테스트하여 웹 파트 응용 프로그램에서 안전하게 사용할 수 있는지 확인해야 합니다. 예를 들어 디자인이 잘못되었고 메모리 사용이 비효율적인 특정 서버 컨트롤이 있다고 가정해 봅니다. 이 컨트롤을 웹 파트 카탈로그에 추가하면 사용자가 해당 컨트롤을 웹 페이지에 추가할 수 있습니다. 또한 카탈로그의 컨트롤은 페이지에 여러 번 추가되어 인스턴스가 여러 개 생성될 수 있으므로 사용자가 잘못된 컨트롤을 여러 번 추가할 수 있고 이로 인해 페이지에서 컨트롤의 여러 인스턴스를 처리할 때 서비스 거부 공격이 생성될 수 있습니다. 웹 파트 카탈로그에 대한 자세한 내용은 CatalogPart 클래스의 참조 항목을 참조하십시오.

컨트롤에 대해 권한 부여 및 필터링 사용

웹 파트에서는 웹 파트 페이지의 UI(사용자 인터페이스)를 만들기 위해 사용하는 서버 컨트롤에 대한 권한 부여 수준을 설정하고 확인할 수 있는 기능을 제공합니다. 설정된 기준에 따라 컨트롤에 권한이 부여된 경우에는 해당 컨트롤이 페이지에 나타나고 제한된 수준에서 컨트롤에 권한이 부여되거나 권한이 부여되지 않은 경우에는 해당 컨트롤의 모양을 적절하게 변경하거나 컨트롤을 모두 숨길 수 있습니다. 예를 들어 관리자로 지정된 사용자가 있다고 가정해 봅니다. 서버 컨트롤을 관리자만 볼 수 있도록 설정할 수도 있습니다. 웹 파트의 권한 부여 및 필터링 기능을 사용하면 이 컨트롤이 특정 관리자에게만 나타나고 다른 사용자는 볼 수 없도록 할 수 있습니다. 권한 부여 및 필터링을 사용하는 기본 메커니즘은 WebPart 클래스의 AuthorizationFilter 속성과 WebPartManager 클래스의 IsAuthorizedOnAuthorizeWebPart 메서드입니다.

컨트롤을 편집할 때 문자열 형식의 속성 인코딩

웹 파트의 고유한 기능 중 하나는 최종 사용자가 페이지를 편집 모드로 전환한 후 서버 컨트롤의 레이아웃, 모양, 동작 및 개인 설정 가능한 속성 값을 변경하여 서버 컨트롤을 편집할 수 있다는 것입니다. 그러나 이런 경우에는 악의가 있는 사용자가 문자열 형식의 속성을 편집하여 잘못된 데이터를 삽입하거나 스크립트 삽입 공격을 시도할 위험도 있습니다. 사용자 지정 EditorPart 컨트롤을 만들어 서버 컨트롤을 편집하는 경우 그리고 지정된 서버 컨트롤에서 개인 설정 가능한 속성이 문자열 형식이거나 문자열 변환기를 사용하는 경우에는 보안을 위해 EditorPart 컨트롤에서 문자열 데이터를 속성에 할당하기 전에 해당 데이터를 인코딩해야 합니다. 예제를 보려면 HtmlEncode 메서드에 대한 참조 설명서를 참조하십시오.

참고 항목

참조

System.Web.UI.Design.WebControls.WebParts

기타 리소스

ASP.NET 웹 파트 컨트롤