use*_*567 5 c# asp.net asp.net-mvc c#-4.0 razorengine
我正在使用RazorEngine.我有一些动态模板,我将在运行时与视图模型绑定.我的要求是在沙箱中运行代码.因此,只允许绑定.RazorEngine允许我在任意app-domain中运行代码,
using (var service = new IsolatedTemplateService(() => appDomain))
{
return service.Parse(newTemplate, model, null, null);
}
Run Code Online (Sandbox Code Playgroud)
如果我使用以下权限运行app-domain,那么它可以工作,
var permissionSet = new PermissionSet(PermissionState.Unrestricted);
Run Code Online (Sandbox Code Playgroud)
但如果我使用这些权限运行它,
var permissionSet = new PermissionSet(PermissionState.None);
permissionSet.AddPermission(new SecurityPermission(PermissionState.Unrestricted));
permissionSet.AddPermission(new ReflectionPermission(PermissionState.Unrestricted));
Run Code Online (Sandbox Code Playgroud)
我会得到,
[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
Run Code Online (Sandbox Code Playgroud)
我需要授予特殊许可吗?
不幸的是,CodeDOM API(RazorEngine 可能使用它从 Razor 编译器生成的语法树生成 C# 代码)需要完全信任。除了为您的程序集提供强名称和 GAC 以便获得完全信任之外,您实际上无能为力。不幸的是,因为它需要整个“FullTrust”权限集,所以您不能只授予特定权限。