首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在沙箱模式下执行任意C#代码?

在沙箱模式下执行任意C#代码?
EN

Stack Overflow用户
提问于 2014-01-14 10:42:12
回答 2查看 1.2K关注 0票数 5

我正在使用RazorEngine。我有一些动态模板,我将在运行时绑定一个视图模型。我的要求是在沙箱中运行代码。因此,只允许绑定。RazorEngine允许我在任意的应用程序域中运行代码,

代码语言:javascript
复制
using (var service = new IsolatedTemplateService(() => appDomain))
{
   return service.Parse(newTemplate, model, null, null);
}

如果我使用以下权限运行应用程序域,那么它就能工作,

代码语言:javascript
复制
var permissionSet = new PermissionSet(PermissionState.Unrestricted);

但如果我使用这些权限运行它,

代码语言:javascript
复制
var permissionSet = new PermissionSet(PermissionState.None);
permissionSet.AddPermission(new SecurityPermission(PermissionState.Unrestricted));
permissionSet.AddPermission(new ReflectionPermission(PermissionState.Unrestricted));

我会得到,

代码语言:javascript
复制
[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

我需要特别许可吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-14 23:15:53

不幸的是,Razor编译器生成的语法树中的CodeDOM API (这很可能是RazorEngine用来从语法树生成C#代码)需要完全信任。除了“强名称”和“GAC”程序集之外,您没有什么可以做的,所以您可以得到完全的信任。不幸的是,因为它需要整个"FullTrust“权限集,所以不能只授予特定的权限。

票数 1
EN

Stack Overflow用户

发布于 2014-01-14 10:49:25

您可能有强名称程序集,需要应用AllowPartiallyTrustedCallers属性。

如何使用AllowPartiallyTrustedCallers属性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21111490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档