RarozEngine在生成页面时拒绝使用Namespace

本文关键字:拒绝 Namespace RarozEngine | 更新日期: 2023-09-27 17:58:26

下午好。在我的解决方案中,我使用RazorEngine库来生成从数据库接收的动态页面。

普通用户可以在他的办公室编辑页面(视图)。

(用于生成PDF文件、DOC文件和个人主页)

示例:

<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,您可以连接到数据库并执行任何操作。

问题:如何禁用命名空间,如"系统"?


简单地替换文本中的"系统"一词是不合适的。您总是可以简单地通过名称来获取类。(+有很多方法可以做到这一点)

Type sys = Type.GetType("Sys" + "tem.Configuration.ConfigurationManager");

RarozEngine在生成页面时拒绝使用Namespace

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

RazorEngine允许您使用隔离API来实现这一点,本文对此进行了说明。基本上,您需要告诉RazorEngine您希望如何创建AppDomain(以及使用什么权限),然后使用RazorEngineneneneba API的Isolated*版本。注意<3.5.0版本无法在没有完全信任的AppDomain中运行。3.5.0(目前为测试版)应该可以使用。

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