我製作了一個多用戶博客引擎,該引擎使用了很棒的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。
是的,這是RazorEngine。 AppDomain將防止訪問文件系統。我想沒有任何訪問數據庫的保護措施,比如獲取一個存儲連接字符串的參數,並將其與精簡器一起使用,以獲取系統中所有用戶的MD5散列值。這就是爲什麼我想以某種方式限制或逃避'@'符號。至於現在,我只是在博客用戶提交模板後刪除'@'。 – Zelid
不完全,您可以添加自己的權限,製作包裝類,並根據需要保護資源。例如,您只需通過使屬性SecurityCritical可以限制對「ViewModel.Db」的訪問。該模板將無法訪問它。 – matthid