【发布时间】:2014-04-15 08:08:24
【问题描述】:
下午好。 在我的解决方案中,我使用 RazorEngine 库来生成从数据库接收的动态页面。
普通用户可以在他的办公室编辑页面(视图)。
(用于生成 PDF 文件、DOC 文件和 MasterPage 的个人页面)。
例子:
<p>Total to pay: @Model["PAYABLE"] @Model["CURRENCY"]</p>
或者:
@foreach(string link in Model.StylesLinks){
<link rel="stylesheet" href="@link" />
}
所有功能都已实现,但系统中存在一个大漏洞。 现在任何用户都可以执行任何代码。
例如,您可以轻松显示 ConnectionStrings 列表:
@foreach (System.Configuration.ConnectionStringSettings conn in
System.Configuration.ConfigurationManager.ConnectionStrings)
{
@:@conn.ConnectionString<br/>
}
然后,使用此 ConnectionStrings,您可以连接到数据库并执行任何操作。
问题:如何禁用使用命名空间,例如“System”?
简单地替换文本中的“系统”一词是不合适的。您总是可以简单地通过名称获取课程。 (+ 有很多方法可以做到这一点)
Type sys = Type.GetType("Sys" + "tem.Configuration.ConfigurationManager");
【问题讨论】:
-
我认为您需要创建一个沙箱:如何:在沙箱中运行部分受信任的代码:msdn.microsoft.com/en-us/library/bb763046%28v=vs.110%29.aspx
标签: c# asp.net-mvc razor razorengine