5

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

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

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

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

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

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

4

1 回答 1

1

这将是极其困难的。

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


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

于 2012-04-27T14:20:46.677 回答