2012-01-01 2 views
6

좋아요, 좋아요, 다른 사람들이 응용 프로그램이로드 할 모듈을 작성하도록 지원을 추가하고 싶은 응용 프로그램이 있습니다.C# Sandboxed Assembly로드

모듈은 .Net으로 작성된 Module 클래스를 확장하는 클래스입니다. 이 DLL을 샌드 박스 환경에서로드하여 특정 디렉토리에서 읽기/쓰기 만 허용하는 방법을 알아야합니다.

이것이 가능합니까?

+1

비슷한 질문 : (http://stackoverflow.com/questions/510071/loading-assemblies-from-a-net [A '샌드 박스 환경'에서 닷넷 응용 프로그램에서로드 어셈블리] -application-in-a-sandbox-environment), [.NET 4.0에서는 어떻게 샌드위치를 ​​사용하여 메모리 내 어셈블리를 만들고 메서드를 실행합니까?] (http://stackoverflow.com/questions/5997995/in- net-4-0-how-do-i-sandbox-in-memory-assembly-and-execute-a-method) –

+0

질문은'scripting' 태그를 참조합니다. .NET 코드를 동적으로 컴파일 할 계획입니까, 아니면이 태그가 상황에 어떻게 적용됩니까? –

답변

9

예, 가능합니다. 코드 액세스 보안 및 .NET 샌드 박스 사용 CSScript 라이브러리 (오픈 소스)를 살펴 보시기 바랍니다. 이 라이브러리는 C# 스크립팅과 동적 어셈블리를 동적 어셈블리로 제공합니다. 저는 이것을 프로젝트에서 사용하여 최종 사용자가 C# 스크립트를 작성하고 실행하여 시스템의 클래스와 상호 작용할 수있게했습니다. 이 프로젝트는 사용자 스크립트가 서버에서 실행될 때 File IO 또는 MessageBox (UI)에 액세스 할 필요가 없었습니다. CSSCript는 어셈블리가 액세스 할 수있는 것을 제한하기 위해 .NET 프레임 워크의 요소를 사용했으며 이러한 금지 된 유형이 호출되면 예외가 발생합니다.

그래서 살펴 보겠습니다. 에 대한 자세한 내용을 알아 내면 내 대답을 편집합니다. 은입니다.


알아 냈습니다.

저에게 :

내가 응용 프로그램을 개발하고 UI를 통해 스크립트 특정 작업을하는 사용자의 능력을 노출하고자하고 여기에 내가 몇 년 전 CSScript의 저자로 한 토론입니다. CSScript는이 점에 매우 적합합니다. 그러나 나는 또한 사용자가 이것을하고 웹 서버에서 스크립트를 실행할 수 있도록하고 싶다. 이제는 사용자가 "Directory.Delete (@"C : \ ", true)"라고 쓰고 하드 드라이브를 지울 수 있으므로 보안상의 악몽이되었습니다. 그렇다면 사용자가 스크립트에서 액세스 할 수있는 어셈블리, 네임 스페이스 또는 클래스를 제한하여 보안 샌드 박스에서 CSScript를 정렬 할 수 있습니까?

올렉 :

즉각적인 매력적인 솔루션은 .NET 샌드 박스를 사용하는 것입니다. 이러한 종류의 시나리오에 맞게 설계되었습니다. CLR 표준 샌드 박싱은 CS 스크립트로 스크립트를 실행하는 호스트 응용 프로그램에서 사용할 수 있습니다. 의심스러운 스크립트를로드하기 전에 CAS를 초기화하고 나머지는 CLR 책임입니다. 디렉토리/파일 권한을 구성해야하는 경우 CAS 도구를 사용하여 권한을 설정하십시오. 이 방법은 사용자가 제공하는 루틴을 "전송"하는 것입니다. CS-Script는 이러한 전송을 구현하는 편리한 메커니즘이지만 실제 보안 문제를 해결하기위한 포괄적 인 기능을 갖춘 .NET Sendoxing이 실제 보안 문제를 해결합니다. CS- 스크립트를 다운로드 할 수있는 은 파일 입출력 작업 (예 : 파일 만들기)에서 스크립트를 방지하는 방법을 보여주는 Sendbox 샘플 (\ Samples \ Sandboxing)을 찾을 수 있습니다.

그래서, 저는 .NET Sandbox를보고 어셈블리를로드해야한다고 생각합니다. 이 예제는 C# 스크립팅에만 해당하는 것으로 알고 있지만 위의 CSScript 예제에서 샌드 박스 및 보안을 구현하는 방법을 보여주기 때문에 시나리오에 해당한다고 생각합니다.샌드 박스에 어셈블리를로드하는 방법의

몇 가지 구체적인 예는 여기에서 찾을 수 있습니다 :

우리가 모듈 로딩을 논의하는 동안,이 Microsoft Prism에 대해 들어 보셨습니까? 이것은 모듈 로딩 및 의존성 삽입 (Unity 또는 MEF을 통한)을위한 좋은 프레임 워크를 제공하며 이는 플러그인 아키텍처를 개발할 때 매우 유용 할 수 있습니다.

안부,

+0

정보 주셔서 감사합니다, 나는 내일 (3am 여기!) 나는 [여기]에서 답변을 얻으려고 노력하고 있습니다 (http://stackoverflow.com/questions/5997995/in-net-4- 0-how-do-i-sandbox-in-memory-assembly-and-execute-a-method) 작동하지만 내 모듈을로드하려고하면 의존성이 있는지 찾지 못한다고합니다. 다행히도 내일 네가 나에게 보낸 모든 연결 고리로 뭔가를 알아낼 수있을거야. – BoJaN

관련 문제