【问题标题】:RarozEngine deny to use Namespace while generating pageRarozEngine 在生成页面时拒绝使用命名空间
【发布时间】: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");

【问题讨论】:

标签: c# asp.net-mvc razor razorengine


【解决方案1】:

VahidN 是正确的:您应该在沙箱中运行此代码。

RazorEngine 允许您使用 Isolation API 执行此操作,该 API 记录在 here。 基本上你需要告诉 RazorEngine 你想如何创建 AppDomain(以及使用什么权限),然后使用 RazorEngine API 的Isolated* 版本。 请注意,

免责声明:我为 RazorEngine 贡献了该领域的一些错误修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 2019-06-30
    相关资源
    最近更新 更多