ASP.NET Razor模板可由用户编辑-出于安全原因删除@

ASP.NET Razor模板可由用户编辑-出于安全原因删除@,asp.net,razorengine,Asp.net,Razorengine,我制作了一个多用户博客引擎,它使用了优秀的ASP.NET Razor模板引擎 用户可以编辑他们的页面模板,并使用自定义标记(如{{BLOG\u POST\u NAME}}{{BLOG\u POST\u COMMENTS\u LIST}}} 然后使用正则表达式用适当的Razor代码替换那些标记{{…}} Razor语法的所有使用都是在用户不可编辑的{{…}}自定义标记中完成的 所以,基本上用户可以编辑所有博客文章模板旁边的自定义{{…}}标签,他们组成 在用户定义的模板中限制Razor语法的好方法

我制作了一个多用户博客引擎,它使用了优秀的ASP.NET Razor模板引擎

用户可以编辑他们的页面模板,并使用自定义标记(如
{{BLOG\u POST\u NAME}}
{{BLOG\u POST\u COMMENTS\u LIST}}}

然后使用正则表达式用适当的Razor代码替换那些标记
{{…}}

Razor语法的所有使用都是在用户不可编辑的
{{…}}
自定义标记中完成的

所以,基本上用户可以编辑所有博客文章模板旁边的自定义
{{…}}
标签,他们组成

在用户定义的模板中限制Razor语法的好方法是什么

我不想让用户在博客文章的模板中执行一些
@(ViewModel.Db.DropAllTables())
,但我必须能够访问用户无法编辑的
@(某物…
)内部标记

现在,在用户保存模板之前,我从用户编辑的模板中删除所有内容,然后用标签内容替换标签

但是用户可以做
@ViewModel.Something
,它仍然调用Razor逻辑

我正在考虑从用户模板中删除所有的
@
符号以防止它,但它不允许用户进行CSS@媒体查询和使用email@addresses.com在他们的模板中

我做的最后一件事-将查找要从用户模板中删除的符号的正则表达式更改为
(@+\B)|(\B@+\b) 

该正则表达式找到要从中删除的
@
: “@abc '@' @abc 卡介苗@ abc@(适用于)

但为了: abc@abc

也许我忘了剃须刀的其他可能用途@

为了保护用户定义的模板并允许Razor语法仅在标记内容中使用,您可以建议做什么


更新:使用RazorEngine。

您使用Asp.Net还是RazorEngine?您已将这两个标签应用于您的问题,因此我假设您正在使用RazorEngine并回答以下问题:

我建议允许一切,并通过代码访问安全性和隔离的AppDomain应用运行时限制(这仍然有一些缺点:用户可能会占用资源,要解决这一问题,需要流程级隔离)。您可以为此使用RazorEngine隔离API:

在Asp.Net的情况下,您基本上也可以这样做,但您需要自己处理跨域通信

马蒂德
-RazorEngine的贡献者

是的,是RazorEngine。AppDomain将防止访问文件系统。我认为访问数据库没有什么保护措施,比如获取一个存储连接字符串的参数,并将其与dapper一起使用,以获取系统中所有用户的MD5哈希值。这就是为什么我在考虑以某种方式限制或转义
@
符号。至于现在,我只是在博客用户提交模板后删除
@
。不完全,您可以添加自己的权限,创建一个包装类,并根据需要保护您的资源。例如,您可以通过使属性SecurityCritical来限制对“ViewModel.Db”的访问。模板将无法访问它。