2014-04-15 43 views
1

下午好。 在我的解決方案中,我使用RazorEngine庫來生成從數據庫接收的動態頁面。RarozEngine否認在生成頁面時使用命名空間

普通用戶可以在他的辦公室編輯頁面(視圖)。

(用於生成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,您可以連接到數據庫,做任何事情。

問題:如何禁用使用命名空間,如「系統」?


只需在文本中替換單詞「系統」不適合。你總是可以簡單地按名字獲得課程。 (+有很多方法可以做到這一點)

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

我認爲你需要創建一個沙盒:如何在Sandbox中部分運行代碼:http://msdn.microsoft.com/en-us/library/bb763046%28v=vs.110%29.aspx – VahidN

回答

1

VahidN是正確的:你應該在沙箱中運行這段代碼。

RazorEngine允許您使用Isolation API完成此操作,該操作記錄爲here。 基本上你需要告訴RazorEngine如何創建AppDomain(以及使用什麼權限),然後使用RazorEngine API的Isolated*版本。 請注意,< 3.5.0版本無法在不完全信任的AppDomain中運行。 3.5.0(目前測試版)應該可以工作。

聲明:我爲RazorEngine提供了該領域的一些錯誤修復。