다음을 통해 공유


안전하게 관리되는 컨트롤 작성

업데이트: 2007년 11월

관리되는 컨트롤은 사용자의 컴퓨터로 다운로드되어 요구에 의해 실행되는 웹 페이지에서 참조하는 어셈블리입니다. 코드 액세스 보안이라는 측면에서 볼 때, 관리되는 컨트롤은 기본 보안 정책에서 실행되는 컨트롤과 더 높은 신뢰 수준을 요구하는 컨트롤의 두 가지 유형이 있습니다.

기본 보안 정책에서 실행될 관리되는 컨트롤을 작성하려면 인트라넷이나 인터넷 영역에서 기본 보안 정책이 허용하는 작업을 알아야 합니다. 관리되는 컨트롤이 발생한 영역에 따라 부여되는 권한 이상의 실행 권한을 요구하지 않는 한 이 컨트롤은 실행됩니다. 관리자나 사용자는 인터넷이나 인트라넷 영역의 코드에 필요 이상의 권한을 부여하지 않을 수 있습니다. 더 높은 신뢰 수준을 요구하는 관리되는 컨트롤을 실행하려면 관리자나 사용자는 코드를 실행할 컴퓨터의 보안 정책을 조정해야 합니다.

가능한 경우 관리되는 컨트롤이 기본적으로 인터넷이나 인트라넷에 허용되지 않은 권한을 요청하지 않도록 작성해야 합니다. 인터넷 영역에서 이는 코드가 SafeTopLevelWindows와 SafeSubWindows(시스템 대화 상자를 가장하지 못하도록 보안 시스템이 만든 창)를 표시하고, 출처 사이트와만 통신하며, 제한되고 격리된 저장소를 사용하도록 제한되는 것을 의미합니다.

인트라넷의 코드는 좀 더 많은 권한을 가집니다. 자세한 내용은 기본 보안 정책을 참조하십시오. 컨트롤이 파일에 액세스하고, 데이터베이스를 사용하고, 클라이언트 컴퓨터에 대한 정보를 수집하는 등의 작업을 수행하려면 더 높은 신뢰 수준이 필요합니다.

개발

신뢰 수준이 높은 컨트롤은 출처가 되는 인트라넷이나 인터넷에서 일반적으로 보장하는 보안 정책보다 덜 제한적인 보안 정책에서 실행됩니다. .NET Framework 클래스 등의 보안 라이브러리에 의한 권한 요구 대부분은 모든 호출자를 검사하는 스택 워크를 수행하여 요구된 권한이 부여되었는지 확인하고, 관리 코드가 아니라 웹 페이지가 보안 목적을 위한 호출자로 취급됩니다. 신뢰 수준이 높은 코드가 악의적인 작업을 수행하도록 신뢰 수준이 낮은 코드가 유도하는 것을 막기 위해 스택 워크가 실행됩니다.

브라우저에서 호스팅되는 관리되는 컨트롤이 웹 페이지의 액티브 스크립트에 의해 조작될 수 있으므로, 악의적인 웹 페이지 작성자가 신뢰 수준이 더 높은 코드를 악용하지 못하도록 방지하기 위해 해당 웹 페이지는 호출자로 간주되어 보안 스택 워크 동안 검사됩니다. 웹 페이지를 호출자로 취급하면, 강력한 이름이나 게시자 인증서에 따라 높은 신뢰 수준이 부여되어 웹 페이지에서 실행되는 컨트롤이 웹 페이지와 같은 영역(인트라넷이나 인터넷)에서 발생한 코드에 일반적으로 허용되지 않는 작업을 수행할 수 없습니다. 배포 고려 사항에 대한 자세한 내용은 다음 단원를 참조하십시오. 피상적으로 보면 신뢰 수준이 높은 컨트롤을 작성하는 것이 불가능해 보이지만 이 시나리오에서 보안 스택 워크 동작을 선택적으로 재정의할 수 있게 하여 코드 액세스 보안이 이를 제공합니다.

신뢰 수준이 높은 컨트롤은 Asserts를 적절하게 사용하여 호출자(컨트롤이 실행되는 웹 페이지)가 일반적으로 갖지 않는 권한에 대해 스택 워크를 간단히 수행할 수 있습니다. Asserts를 사용할 때 악의적인 웹 페이지가 부적절한 작업을 수행하도록 허용하는 위험한 API를 사용하지 않도록 주의해야 합니다. 이러한 이유 때문에 신뢰 수준이 높은 컨트롤을 작성할 때 요구되는 주의 및 보안 인식 수준은 보안 클래스 라이브러리를 작성할 때 필요한 수준에 근접합니다.

다음은 안전한 관리 컨트롤을 작성하기 위한 몇 가지 팁입니다.

  • 가능한 경우, 컨트롤에 의해 노출되지 않도록 높은 신뢰 수준을 요구하는 작업을 캡슐화합니다. 이런 방법을 통해 이들 작업에서 요구하는 권한을 어설션할 수 있으며 컨트롤을 사용하는 웹 페이지에서 기능을 악용할 수 없도록 할 수 있습니다.

  • 컨트롤 설계에 의해 컨트롤이 수행하는 신뢰 수준이 높은 작업이 노출되어야 하는 경우에는 사이트나 URL ID 권한 요구를 작성하여 컨트롤을 실행할 웹 페이지에서만 컨트롤을 호출할 수 있도록 하는 것이 좋습니다.

배포

신뢰 수준이 높은 컨트롤은 항상 강력한 이름으로 지정되거나 게시자 인증서(X.509)로 서명되어야 합니다. 이렇게 하면 정책 관리자는 다른 인트라넷이나 인터넷 코드와 관련된 컨트롤의 보안을 낮추지 않고도 더 높은 신뢰 수준을 컨트롤에 부여할 수 있습니다. 어셈블리가 서명된 후 사용자는 충분한 권한과 연결된 새 코드 그룹을 만들어 사용자의 회사나 조직에서 서명한 코드만 코드 그룹의 멤버로 허용되도록 지정해야 합니다. 이러한 방법으로 보안 정책을 수정하면 신뢰 수준이 높은 컨트롤에 충분한 실행 권한이 부여됩니다.

보안 정책을 수정해야 신뢰 수준이 높은, 다운로드한 컨트롤이 제대로 작동되기 때문에, 설명된 정책 변경 사항을 여러 클라이언트 컴퓨터로 배포하는 엔터프라이즈 관리자가 있는 기업 인트라넷에서 이러한 유형의 컨트롤을 배포하기가 훨씬 쉬워집니다. 신뢰 수준이 높은 컨트롤을 일반 기업이나 단체의 구성원이 아닌 일반 사용자도 인터넷을 통해 사용하려면 컨트롤 게시자와 사용자 사이에 신뢰 관계가 있어야 합니다. 사용자는 게시자의 지시 사항을 편리하게 사용하여, 정책을 수정하고 신뢰 수준이 높은 컨트롤을 실행할 수 있어야 합니다. 그렇지 않으면 컨트롤은 실행되지 않습니다.

참고 항목

개념

코드 액세스 보안 소개

보안 클래스 라이브러리 작성

기본 보안 정책

기타 리소스

강력한 이름의 어셈블리 만들기 및 사용

보안 정책 관리