ASP.NET MVC 3 Razor View限制

Mat*_*edi 5 .net c# asp.net asp.net-mvc-3

我提前为我的问题的一般性质道歉,但是我无法从试图在网上做同样事情的人那里找到任何有用的建议.让我来描述一下我的情景:

我通过在数据库中存储视图(使用Razor)来为网站的最终用户/设计者提供定制视图的能力.我完成了所有这些工作,但我的问题如下:从安全角度来看,如何确保并强制执行不需要的代码不会在用户定义的视图中执行?我认为有两种基本方法在概念上有效,但我不确定哪种方法更可行或更可行.

选项1:在管理工具中创建一个允许用户输入视图代码的验证方法.这需要采用白名单或黑名单方法来实现或不允许.

选项2:防止在发生视图渲染时执行不需要的代码.

作为需要阻止的快速示例,我们不希望在web.config中允许访问读取或写入文件,访问任何数据访问功能,甚至访问配置设置等.可能存在一个可能不应该允许的大小合适的事物列表,但我需要坐下来尝试尽可能多地考虑与安全相关的问题.

我的问题是,哪种方法最好?此外,可以提供任何方向如何去做?我认为我可能能够进行基于信任级别的更改,这将是选项2,但是无法找到任何方法来使基于每个视图的庄园工作(管理代码可以执行它想要的任何内容).我认为选项1最终会成为最好的选择,我将不得不检查某些不应允许的框架函数的输入.有没有人有任何经验做我喜欢做的事情?任何反馈都非常感谢!

SLa*_*aks 1

这将是极其困难的。

您可以通过 Razor 预处理器运行模板,然后使用 Roslyn(仍处于早期测试版)解析生成的文件并查看所有方法调用(或构造函数),如果它调用您不喜欢的内容,则返回错误。
我强烈建议您为此使用白名单,因为 .Net 框架足够大,您肯定会忽略黑名单中的某些内容。


但是,我建议您根本不要使用 Razor,而是使用不允许真正的 C# 代码的模板引擎。