模板中嵌入 Crystal 个变量

Embedded Crystal variables in templating

我是 Crystal 的新手(并且从未真正使用过 ruby),所以对于我的无知,我深表歉意!我查看了 ecr docs 但似乎无法在那里找到答案。

我正在考虑在 Kemal 中使用嵌入式 Crystal 作为动态模板。我可以确认 - 模板只能呈现调用范围内可用的变量,还是可以从模板本身内部进行 method/function 调用? IE。是否有任何 possibility/risk 能够从模板中执行“恶意”crystal 代码(在这种情况下,恶意指的是 I/O 或文件访问等)?

以 Kemal 文档为例:

get "/:name" do |env|
  name = env.params.url["name"]
  render "src/views/hello.ecr"
end

在视图 hello.ecr 中 - name 是模板中唯一可用的项目,或者可以从模板中调用 File.delete("./foo") 吗?

模板被编译成 Crystal 代码,你可以在其中编写任何类型的代码,例如 File.delete("./foo"),例如,如果你在模板中编写 <% File.delete("./foo") %>

如果您担心 name 会包含代码并且会以某种方式执行,那么请不要担心,这不会发生。 Crystal 中的动态运行时代码执行是不可能的,因此有人无法将恶意代码注入您的模板。