1

我的 ASP.NET MVC 应用程序包括许多可由最终用户编辑的 View 文件(它们存储在数据库中并通过 VirtualPathProvider 加载)。

我想允许我的用户编辑他们的视图文件,但是我对安全隐患持谨慎态度。

有什么方法可以强制执行某种代码访问安全性,以确保视图中的任何代码都不能执行任何危险的任务(即最小信任,它只能通过传入的存储库对象访问数据库并呈现自己。没有文件系统访问,没有调试它的主机进程等)。

我可以限制视图派生的超类(通过让我的 VirtualPathProvider 提供标头<%@ Page指令,而仅从数据库返回渲染函数体),所以我可以通过将属性应用到这个超类来强制 CAS,还是更多参与其中,这不是一件容易的事吗?

4

1 回答 1

1

MVC 运行在同构的 AppDomain中,这意味着框架中的所有代码都以相同的权限集运行。因此,无法降低给定视图的 CAS 权限。(无论如何,您不会真的想这样做,因为它会阻止 MVC 框架正常工作。)

唯一可行的解​​决方案——尽管不幸的是,这是大量的工作——是定义你自己的视图格式,它根本不能用来做任何危险的事情,然后有一个自定义视图引擎知道如何提供这种类型的视图。这使您能够根据需要定义“危险”,从阻止服务器端代码执行到甚至试图阻止 Javascript 执行(这在其自身的仪式中是一项相当困难的任务)。

于 2012-08-14T03:14:49.750 回答