用户可编辑的ASP.NET Razor模板 - 出于安全原因删除@
我制作了一个多用户博客引擎,该引擎使用了很棒的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。
你使用Asp.Net或RazorEngine吗?您将两个标签应用于您的问题,所以我假设您正在使用RazorEngine并回答以下问题:
我建议允许所有事情,并通过代码访问安全性和一个孤立的AppDomain应用运行时限制(这仍然有一些缺点:像用户可以占用资源,解决这个问题需要进程级别的隔离)。您可以使用RazorEngine隔离API进行以下操作:https://antaris.github.io/RazorEngine/Isolation.html
对于Asp.Net,您基本上可以做同样的事情,但是您自己负责,并且需要自己处理跨域通信。
matthid - 一个RazorEngine贡献者
是的,这是RazorEngine。 AppDomain将防止访问文件系统。我想没有任何访问数据库的保护措施,比如获取一个存储连接字符串的参数,并将其与精简器一起使用,以获取系统中所有用户的MD5散列值。这就是为什么我想以某种方式限制或逃避'@'符号。至于现在,我只是在博客用户提交模板后删除'@'。 – Zelid
不完全,您可以添加自己的权限,制作包装类,并根据需要保护资源。例如,您只需通过使属性SecurityCritical可以限制对“ViewModel.Db”的访问。该模板将无法访问它。 – matthid