ASP.NET Razor模板可由用户编辑-出于安全原因删除@
我制作了一个多用户博客引擎,它使用了优秀的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语法的好方法
{{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”的访问。模板将无法访问它。