ASP.NET MVC 3 Razor View限制

时间:2012-04-27 14:17:35

标签: c# asp.net .net asp.net-mvc-3

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

这将非常困难。

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


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