c# - 在沙盒模式下执行任意 C# 代码?

标签 c# asp.net asp.net-mvc c#-4.0 razorengine

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

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

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

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# 代码的 API)需要完全信任。除了强名称和 GAC 程序集之外,您实际上无能为力,因此您可以获得完全信任。不幸的是,因为它需要整个“FullTrust”权限集,所以您不能只授予特定权限。

关于c# - 在沙盒模式下执行任意 C# 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21111490/

相关文章:

c# - 改变控制台颜色,给我一个 Stackoverflow 异常

c# - 替换列表中的字符串 C#

javascript - 需要将Web Form JavaScript转换为js文件

c# - 如果在 MVC 的第二个数组中找不到,则从第一个数组中删除

c# - 来自 C# 的警报消息

c# - 如何登录网页并在 C# 中检索其内容?

c# - 将属性名称列表作为 Lambda 表达式传递的最佳方法

asp.net - ASP.NET 5 中的 .NET 版本

c# - Resharper:无法在 VS2010 SP1 中解析符号 'Eval'

html - 导航栏折叠在 Bootstrap 中无法正常工作