【发布时间】: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