2015-05-29 24 views
1

我製作了一個多用戶博客引擎,該引擎使用了很棒的ASP.NET Razor模板引擎。用戶可編輯的ASP.NET Razor模板 - 出於安全原因刪除@

用戶可以編輯自己的頁面模板和自定義標籤撰寫他們喜歡{{BLOG_POST_NAME}}{{BLOG_POST_COMMENTS_LIST}}

那麼那些{{...}}使用正則表達式與適當的剃刀代碼替換標籤。

Razor語法的所有用法都在那些{{...}}用戶不可編輯的自定義標籤內完成。

因此,基本上用戶可以編輯他們所組成的自定義{{...}}標籤旁邊的所有博客文章模板。

限制用戶定義模板中Razor語法的好方法是什麼?

我不希望用戶在博客文章的模板內部做一些@(ViewModel.Db.DropAllTables()),但我必須有權訪問@(something...)內部的標籤,這些標籤不能被用戶編輯。

至於現在,就在用戶保存模板之前,我從用戶編輯的模板中刪除所有@,然後用他們的Razor內容替換標籤。

但用戶可以做@ViewModel.Something,它仍然呼籲剃刀邏輯...

我想從用戶模板移除所有@符號,以防止它,但它不會讓用戶做CSS @媒體 - 在他們的模板中查詢並使用[email protected]

最後一件事我做 - 改變的正則表達式查找符號從用戶模板上刪除對(@+\B)|(\[email protected]+\b)

該正則表達式查找@從去除: 「@abc '@' @abc BCD @ ABC @ (對於)

,但仍保留了: ABC @ ABC

也許我忘了剃鬚刀的一些其他可能的用法@

爲了讓用戶定義的模板受到保護並允許在標記內容中僅使用Razor語法,您可以採取什麼建議?

更新:使用RazorEngine。

回答

1

你使用Asp.Net或RazorEngine嗎?您將兩個標籤應用於您的問題,所以我假設您正在使用RazorEngine並回答以下問題:

我建議允許所有事情,並通過代碼訪問安全性和一個孤立的AppDomain應用運行時限制(這仍然有一些缺點:像用戶可以佔用資源,解決這個問題需要進程級別的隔離)。您可以使用RazorEngine隔離API進行以下操作:https://antaris.github.io/RazorEngine/Isolation.html

對於Asp.Net,您基本上可以做同樣的事情,但是您自己負責,並且需要自己處理跨域通信。

matthid - 一個RazorEngine貢獻者

+0

是的,這是RazorEngine。 AppDomain將防止訪問文件系統。我想沒有任何訪問數據庫的保護措施,比如獲取一個存儲連接字符串的參數,並將其與精簡器一起使用,以獲取系統中所有用戶的MD5散列值。這就是爲什麼我想以某種方式限制或逃避'@'符號。至於現在,我只是在博客用戶提交模板後刪除'@'。 – Zelid

+0

不完全,您可以添加自己的權限,製作包裝類,並根據需要保護資源。例如,您只需通過使屬性SecurityCritical可以限制對「ViewModel.Db」的訪問。該模板將無法訪問它。 – matthid

相關問題