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

2023-11-27

我有类似邮件合并的功能,它需要一个模板、一些业务对象,并生成 html,然后将其转换为 PDF。

我在用着剃刀引擎将模板+模型转换为 html 位。

如果我让用户指定模板,我要冒什么风险?是否可以降低任何风险?

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

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


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

在未来的推动中,我希望引入一种向管道添加扩展的通用方法,以便您可以执行代码生成检查等操作。我想这将启用在编译之前对生成的代码进行类型检查的方案。

几天前,我将 RazorEngine (v3) 的早期版本推到了 GitHub 上。请随意检查一下。https://github.com/Antaris/RazorEngine

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让用户指定 RazorEngine 模板有多危险? 的相关文章

随机推荐

  • 如何增加 Bootstrap-Vue 中工具提示的宽度

    有没有办法增加 Bootstrap vue js 中工具提示的宽度 我有一个重要的声明要在工具提示中显示 并且工具提示将消息显示为连续三个单词 所以工具提示的高度更大 宽度更小 div span class d inline block s
  • R 中的 2 种颜色热图,其中中间颜色锚定到特定值

    该热图图像是在 Excel 中生成的 但当我尝试学习 R 时 我想知道如何使用 R 制作这样的热图 现在 这段代码可以工作 但并不像预期的那样 p lt ggplot melt heat aes Var2 Var1 geom tile ae
  • 使用 JAX-RS 进行 Bean 验证(rest-easy):无法识别参数名称

    我将 JAX RS 资源与 Bean 验证一起使用 并按预期在这两个工作之间进行集成 但是 在验证错误报告参数名称为 arg0 的情况下生成的默认错误消息 如下所示 PARAMETER login arg0 password passwor
  • 键盘隐藏TabBar

    我正在 TabBar 应用程序中工作 在一个视图中 有一个 UISearchBar 按下 时 会出现键盘 问题是键盘隐藏了标签栏 你知道如何解决吗 自从有人问这个问题以来已经有一段时间了 但为了文档的缘故 这里是这样的 首先订阅NSNoti
  • 当 url 包含尾部斜杠时 CSS 不加载

    我正在构建一个 j2ee 应用程序并将其部署到 gae 由于某种原因 当我的 url 末尾有一个尾部斜杠时 CSS 不会加载 例如 mysite com account完美运作 but mysite com account 加载没有 CSS
  • 按顺序运行多个 Magento DataFlow 配置文件

    我正在开发一个 Magento 扩展 允许用户将类别 产品和其他类型的数据从不同的网上商店解决方案导入到 Magento 中 为了实现这一目标 我设置了几个负责导入的 DataFlow 高级配置文件 到目前为止 它工作正常 但配置文件需要按
  • 使用 grep 查找带有反斜杠的字符串 - 字符转义

    我使用时遇到困难 作为正则表达式中的喋喋不休者 有什么想法可以让它发挥作用吗 grep pattern text with backslash value T Expected output 1 text with backslash 单个
  • ASP.NET GridView SortedAscendingHeaderStyle 不起作用

    My SortedAscendingHeaderStyle and SortedDescendingHeaderStyle根本不工作
  • 为什么 React hooks 以这种方式命名为 useXXX? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我一直想知道 React hooks 的命名 例如 useEffect 它的名称如何暗示像 componentDidUpdate 或 componentDidMount 之类的东西 它相当
  • Django Rest Framework 如何发布日期字段

    我想发布带有字段的 JSON 请求date date 2015 02 11T00 00 00 000Z 它的字符串是自动转换而来的Date对象 我不想裁剪该部分T00 00 00 000Z在前端手动 但是如果我发布这样的请求 DateFie
  • 如何使用 inotifywait 来查看文件夹中的文件而不是文件夹中的文件

    我想使用 inotifyway 来监视文件夹中新创建或移动的文件 但仅限于文件 假设我的文件夹名称为 watched folder test 文件名为 toto txt 如果我使用 mv 命令将文件移动到 Watched folder te
  • RegularExpressionValidator 上用于检查文本框文本长度是否为 6 个或更多字符的表达式是什么?

    RegularExpressionValidator 控件检查要验证的文本框是否包含 6 个或更多字符的格式是什么 6 会在正则表达式的大多数变体中执行此操作 让我验证它在这个特定情况下是否有效 编辑 我想它有效
  • Python sys.argv 保留 ' ' 或 ""

    终端 python test py blah blah 在测试 py中 print sys argv test py blah blah lt blah arg 如何保留其 或有没有办法知道 arg 是否用 或 包裹 Your shell在
  • 如何在 Angular 6 中动态添加输入字段

    我需要将输入字段添加到对象数组和根据用户选择动态增长的地图 例如InputForm有一个列表和一张需要用户填写的地图 export class InputForm mapA listA ListA export class ListA in
  • 如何确定 ThreadPool 队列中的项目数

    我正在使用 ThreadPool 对 1000 个工作项进行排队 While reading in data for processing args some data that has been read ThreadPool Queue
  • 句子的 RDF 表示

    我需要以 RDF 格式表示句子 换句话说 约翰喜欢可乐 将自动表示为 Subject John Predicate Likes Object Coke 有谁知道我应该从哪里开始 是否有任何程序可以自动执行此操作 或者我需要从头开始执行所有操
  • Monodroid Javascript 回调

    我正在尝试使用 monodroid 和 webkit 来创建一个应用程序 我在让 html 页面调用 javascript 方法时遇到问题 该方法将是我的应用程序中方法的接口 有一个关于此的教程http developer android
  • 使用 csrf 令牌从 Android 应用程序访问 laravel 应用程序

    我正在学习laravel框架 我已经安装了5 0版本 我将它用于 json api 服务 该服务将在调用特定路由后提供 JSON 输出 如果我从浏览器请求 URL 它效果很好 但是当我尝试从我的 Android 应用程序访问时 它会给出错误
  • 使用 LINQ 从 XML 获取最大属性值

    我有以下内容XML文件 我想要得到Max NR using LINQ 有人可以帮我做到这一点吗 我知道如何对节点执行此操作 但属性让我感到困惑 S
  • 让用户指定 RazorEngine 模板有多危险?

    我有类似邮件合并的功能 它需要一个模板 一些业务对象 并生成 html 然后将其转换为 PDF 我在用着剃刀引擎将模板 模型转换为 html 位 如果我让用户指定模板 我要冒什么风险 是否可以降低任何风险 例如 用户可以执行任意代码吗 删除