【问题标题】:ASP.NET MVC 3 Razor View RestrictionsASP.NET MVC 3 Razor 视图限制
【发布时间】:2012-04-27 14:17:34
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 从用户的角度来看,选项 2 会很糟糕,因为用户可能会尝试使用他或她不知道是“坏”的代码。我同意 SLaks,白名单方法会更好,我不知道您的项目的确切性质,例如您的消费者是谁,但这将是一项艰巨的任务,具体取决于您需要给予他们多少灵活性。
  • 我打算建议你查看 Liquid 标记,然后我找到了 DotLiquid。看起来它涵盖了您要完成的任务(但使用 Liquid 而不是 Razor)。

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


【解决方案1】:

这将非常困难。

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


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

【讨论】:

  • 我最初是从自定义模板引擎开始的,但坚持使用 Razor 视图引擎似乎有很多好处。即常见视图编程任务(如条件、循环)的内置能力,以及它提供对模型的访问的事实。另外,似乎内置的缓存机制将节省大量资源,而不是我必须为自定义模板系统实现更多自定义的东西。我能找到的唯一真正的缺点(尽管它显然是一个严重的缺点)是安全性。如果你能想到更多的缺点,那可能会让我重新考虑。
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2011-03-11
  • 2012-06-24
相关资源
最近更新 更多