2010-08-04 3 views
3

확장 성을 위해 MEF를 사용하는 .NET 4 응용 프로그램이 있습니다. 내 주요 응용 프로그램에는 Host, ApplicationContracts의 세 가지 어셈블리가 있습니다..NET에서 CAS를 사용하여 MEF 확장 프로그램을 잠글 수있는 방법은 무엇입니까?

Host은 컨테이너를 만들고 구성을 수행하는 "부팅 스트래핑"실행 파일입니다.

에는 내 응용 프로그램의 논리가 포함되어 있으며 타사 확장 점이 더 있습니다.

Contracts에는 확장 점에 사용되는 인터페이스 (및 일부 도우미 클래스)가 포함되어 있습니다.

따라서 타사 응용 프로그램을 개발중인 사람은 Contracts에 대한 참조를 포함해야하지만 Application에 대한 참조는 포함하지 않아야합니다.

내 보안 모델은 다음과 같이해야한다고 생각 해요 :해야

  1. HostApplicationSecurityCritical
  2. Contracts해야 SecuritySafeCritical
  3. 모든 제 3 자 확장해야 보안 투명성

기본적으로 1. 만족할 것으로 생각합니다. 어셈블리 속성을 사용하여 2.를 구현할 수 있다는 것을 알고 있습니다. 문제는 규칙 3을 어떻게 집행합니까? 운영 체제가 다운로드 한 모든 확장 프로그램을 신뢰할 수 없다고 플래그하여 자동으로 이렇게합니까? 다운로드 한 확장 어셈블리가 완전히 신뢰할 수 있습니까?

+1

: "다운로드 한 확장 어셈블리가 완전히 신뢰하게하는 것이 가능합니까?"

다음은이 주제에 대한 MSDN 문서입니다 확장 기능이 다운로드되는 방식에 따라 달라질 수 있습니다. 사용자가 수동으로 어셈블리를 다운로드 한 다음 -Properties를 마우스 오른쪽 버튼으로 클릭하고 "차단 해제"를 선택하면 로컬 어셈블리와 같은 시스템을 찾습니다. – JaredReisinger

+0

@JaredReisinger : 그건 의미가 있습니다. 제 3 자도 어셈블리에 서명 할 수 있다고 생각하지만, 프로세스에 대해서는 잘 모릅니다. –

답변

3

응용 프로그램이 완전 신뢰 상태로 실행되는 경우 기본적으로 확장은 완전 신뢰로 실행되며 원하는 모든 작업을 수행 할 수 있습니다. 보안 속성이 무엇인지는 중요하지 않습니다. 확장 프로그램에서 수행 할 수있는 작업을 제한하려면 샌드 박스 appdomain을 만들어야합니다. HostApplication을 해당 AppDomain에서 완전히 신뢰할 수있는 것으로 설정하면 다른 모든 코드는 부여한 사용 권한 만 갖게됩니다. 당신은 질문 How to: Run Partially Trusted Code in a Sandbox

+0

나는 그것을 잃어버린 원인으로 생각하고 있습니다. 타사 확장 프로그램을 작성하여 설치 파일에 패키지하고 PC 소유자가 설치 파일을 실행하면 누구나 코드를 완전히 신뢰할 수 있습니다. MEF는 확장 어셈블리를 자체 앱 도메인에로드하지 못하게합니다. 내 자신의 앱 도메인에 (보안 키 등을 포함하는) 매우 중요한 코드를로드 할 수도 있습니다. –

+1

@Scott 타사 확장 프로그램이 실행 가능한 설치 파일 대신 앱에서 이해할 수있는 패키지가되도록 앱을 설계 할 수 있습니다. 그런 다음 앱에서 확장 프로그램을 관리하게하고 설치시 코드를 실행하지 못하게합니다. MEF는 AppDomains와 관련된 특정 작업을 수행하지 않지만 샌드 박스 AppDomain을 만든 다음 해당 AppDomain 내에 MEF 컨테이너를 만들 수 있습니다. 또는 다른 AppDomains에서 플러그인을 만드는 것을 처리하는 System.Addin (MAF)을 볼 수 있습니다.MAF는 상당히 복잡하기 때문에 MEF로 자신 만의 샌드 박싱을 쉽게 수행 할 수 있습니다. –

관련 문제