我的ASP.NET MVC应用程序包含许多可由最终用户编辑的View文件(它们存储在数据库中并通过VirtualPathProvider加载)。
我想让我的用户编辑他们的视图文件,但我对安全隐患保持警惕。
有没有办法可以强制执行某种代码访问安全性,以确保视图中的任何代码都不能执行任何危险的任务(即最小信任,它只能通过传入的存储库对象访问数据库)渲染自己。没有文件系统访问,没有调试它的主机进程等。)
我可以限制视图派生自的超类(通过让我的VirtualPathProvider提供头<%@ Page
指令,而只从数据库返回渲染函数体),所以我可以通过应用属性来强制执行CAS这个超类,还是更复杂的东西,这不是一件容易的事?
答案 0 :(得分:1)
MVC在homogeneous AppDomain中运行,这意味着框架中的所有代码都使用相同的权限集运行。因此,无法降低给定视图的CAS权限。 (无论如何,你真的不想这样做,因为它会阻止MVC框架正常工作。)
唯一可行的解决方案 - 虽然不幸的是这是一项大量工作 - 是定义自己的视图格式,根本不能用来做任何危险的事情,然后有一个自定义视图引擎知道如何提供视图那种类型。这使您能够根据需要定义“危险”,从阻止服务器端代码执行到甚至尝试阻止Javascript执行(这在其自己的仪式中是一项相当困难的任务)。