簡體   English   中英

在Sandbox模式下執行任意C#代碼?

[英]Executing arbitrary C# code in Sandbox mode?

我正在使用RazorEngine。 我有一些動態模板,我將在運行時與視圖模型綁定。 我的要求是在沙箱中運行代碼。 因此,只允許綁定。 RazorEngine允許我在任意app-domain中運行代碼,

using (var service = new IsolatedTemplateService(() => appDomain))
{
   return service.Parse(newTemplate, model, null, null);
}

如果我使用以下權限運行app-domain,那么它可以工作,

var permissionSet = new PermissionSet(PermissionState.Unrestricted);

但如果我使用這些權限運行它,

var permissionSet = new PermissionSet(PermissionState.None);
permissionSet.AddPermission(new SecurityPermission(PermissionState.Unrestricted));
permissionSet.AddPermission(new ReflectionPermission(PermissionState.Unrestricted));

我會得到,

[SecurityException: Request failed.]
   System.AppDomain.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +0
   RazorEngine.Templating.IsolatedTemplateService..ctor(Language language, Encoding encoding, IAppDomainFactory appDomainFactory) +408
   RazorEngine.Templating.IsolatedTemplateService..ctor(Language language, Encoding encoding, Func`1 appDomainFactory) +73
   RazorEngine.Templating.IsolatedTemplateService..ctor(Func`1 appDomainFactory) +41

我需要授予特殊許可嗎?

不幸的是,CodeDOM API(可能是RazorEngine用來從Razor編譯器生成的語法樹生成C#代碼)需要完全信任。 除了強名稱和GAC你的裝配之外你沒有什么可以做的,所以你得到了充分的信任。 不幸的是,因為它需要整個“FullTrust”權限集,所以您不能僅僅授予特定權限。

您可能具有強名稱程序集,需要應用AllowPartiallyTrustedCallers屬性。

如何使用AllowPartiallyTrustedCallers屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM