ASP.NET MVC 3 Razor视图限制

ASP.NET MVC 3 Razor视图限制

问题描述:

我提前为我的问题的一般性质道歉,但我无法找到的人试图做同样的事情,我在网络上的任何有用的建议。让我来描述一下我的情况:ASP.NET MVC 3 Razor视图限制

我提供最终用户/网站的设计师通过存储在数据库中的视图(用剃刀),以定制自己的意见的能力。我有这一切的工作,但我的问题是以下;从安全的角度来看,我如何确保并强制执行不需要的代码不会在用户定义的视图中执行?我认为有两种基本方法将在概念上起作用,但我不确定哪一种方法更可行或可行。

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

选项2:从能够视图的渲染时发生执行防止不希望的代码。

由于东西需要被*一个简单的例子,我们不希望允许访问在web.config中读或写文件,访问任何数据访问功能,甚至访问配置设置等。 。可能会有一些可能不应该允许的大小适中的列表,但我需要坐下来尽量考虑与安全相关的问题。

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

+0

选项2将是从用户的角度来看,谁可能会尝试使用代码,他或她,否则不知道的是“坏”的可怕。我同意SLak的白名单方法会更好,我不知道你的项目的确切性质,比如谁是你的消费者,但这将是一项艰巨的任务,这取决于你需要给他们多少灵活性。 – AwDogsGo2Heaven 2012-04-27 14:27:34

+0

我打算建议你查看Liquid标记,然后找到[DotLiquid](http://dotliquidmarkup.org/try-online)。它看起来像涵盖了你想要完成的事情(但是使用Liquid而不是Razor)。 – 2012-04-27 14:29:02

这将是非常困难的。

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


但是,我反而建议你根本不使用剃刀,而是使用一个模板引擎不允许真正的C#代码。

+0

我原本的DID从一个自定义的模板引擎开始,但似乎有许多优势坚持使用Razor视图引擎。即常见视图编程任务的内置能力,如条件,循环以及它提供对模型的访问。此外,似乎内置缓存机制将节省大量资源,而不必为自定义模板系统实现更多的自定义内容。我能找到的唯一真正的缺点(虽然它显然是一个严重的缺点)是安全性。如果你能想到更多的缺点,那可能会让我重新考虑。 – 2012-04-27 14:32:13