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