>

스크립팅 언어의 기초로 주문형 코드를 컴파일하는 C #의 기능을 사용한다는 아이디어를 가지고 놀았습니다. 파일 시스템, 네트워크 등에 액세스 할 수 없도록 실행중인 스크립트를 샌드 박스로 만드는 방법이 궁금합니다. 기본적으로 스크립트 실행에 대한 제한된 권한을 원합니다.

내가 취하는 단계 :

CompilerResults r = CSharpCodeProvider.CompileAssemblyFromSource(source);
Assembly a = r.CompiledAssembly;
IScript s = a.CreateInstance(...);
s.EntryPoint(...);


  • 답변 # 1

    권장되는 접근 방식은 샌드 박스 앱 도메인에서 의심스러운 코드를 실행하는 것입니다. 여러 가지 이유가 http://blogs.msdn.com/b/shawnfa/archive/2006/04/19/579066.aspx에 나와 있으며, 더 중요한 이유는 다른 잠재적 인 접근 방식 중 대부분이 현재 지원되지 않기 때문입니다. NET 4.0.

  • 답변 # 2

    수정 : 안전하지 않다는 것을 무시하십시오!

    System.Security.Permissions.SecurityPermission 를 확인하십시오  (및 FileIOPermission과 같은 서브 클래스) 및이 학습서. 안전하지 않은 작업을 수행하지 않도록 코드를 일시적으로 거부하려면 다음과 같은 명령문을 사용할 수 있습니다.

    NamedPermissionSet ps = new NamedPermissionSet("Nothing");
    ps.Deny();
    CallYourScriptHere();
    CodeAccessPermission.RevertAll();
    
    

  • 이전 c++ - 기본 POD 전용 템플릿 전문화
  • 다음 c++ - 파생 클래스에서 연산자 새로 만들기/삭제 재정의