c# - ASP.NET MVC 3 Razor View 限制

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

对于我的问题的一般性,我提前表示歉意,但我无法从网络上试图与我做同样事情的人那里找到任何有用的建议。让我描述一下我的场景:

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

选项 1:在允许用户输入 View 代码的管理工具中创建验证方法。这将需要采用白名单或黑名单方法来确定允许或不允许的内容。

选项 2:防止在呈现 View 时执行不需要的代码。

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

那么我的问题是,哪种方法是最好的选择?另外,是否可以提供有关如何进行的任何指导?我想我可能能够进行基于信任级别的更改,这将是选项 2,但找不到任何方法使它在基于每个 View 的庄园中工作(允许管理代码执行它想要的任何内容)。我认为选项 1 最终将成为最佳选择,我将不得不检查某些不应被允许的框架函数的输入。有没有人有像我想做的那样的经验?非常感谢任何反馈!

最佳答案

这会非常困难。

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


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

关于c# - ASP.NET MVC 3 Razor View 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10352345/

相关文章:

c# - 异步错误 Xamarin iOS

c# - 以编程方式将 C# 变量传递给 Crystal Reports

c# - 泛型实现中的值和引用类型

c# - 使用 Linq 从列表中获取所有匹配值的索引

c# - FileNameSizeDelimiteC 必须是常量

c# - ASP.NET 将图片添加到 TableCell

c# - .Net Framework dll 不适用于 .Net Standard 项目

c# - 从 HTML 导出到 PDF (C#)

c# - MVC4 - Razor - 动态模块内容?

C# 循环遍历给定标签的数组