让用户指定RazorEngine模板有多危险?

Gre*_*reg 7 .net c# asp.net mailmerge razor

我有类似邮件合并的功能,它采用模板,一些业务对象,并生成html,然后将其制作成PDF.

我正在使用RazorEngine来做模板+模型到html位.

如果我让用户指定模板,我会冒什么风险?是否有可能减轻任何风险?

例如,用户可以执行任意代码吗?(删除文件,更改数据库等?)有什么方法可以检测到这种事情吗?(我知道这通常是不可能的,但剃刀模板中的代码位应该是模型属性获取,或者可能是基于模型属性值的语句).

我基本上相信这里的用户(这是一个小型的私人项目),但是随着模板引擎的发展,这个应用程序似乎过于强大.

Mat*_*ott 11

在版本3中,我介绍了一个IsolatedTemplateService支持在另一个模板中解析/编译模板的方法AppDomain.您将能够控制将编译模板的应用程序域的创建,这意味着您可以通过将安全策略应用于子应用程序域本身来引入您想要的任何安全要求.

在未来的推动中,我希望引入一种通用的方法来为管道添加扩展,这样你就可以进行代码生成检查.我想这将启用在生成代码编译之前对类型进行类型检查的场景.

几天前我把早期版本的RazorEngine(v3)推到了GitHub上.随意检查出来.https://github.com/Antaris/RazorEngine


And*_*ber 6

一个cshtml Razor文件能够执行任何.网站上下文中的NET代码是的,允许用户提供它们是一种安全风险.

通过接受更通用的HTML模板,使用自定义标记输入模型数据,您将获得更好的服务.