1

我是水晶新手(从未真正使用过红宝石),所以为这里的无知道歉!我查看了ecr 文档,但似乎无法在那里找到答案。

我正在考虑在Kemal中将 Embedded Crystal 用于动态模板。我可以确认 - 模板只能呈现调用范围内可用的变量,还是可以从模板本身进行方法/函数调用?IE 是否存在能够从模板中执行“恶意”水晶代码的可能性/风险(在这种情况下,恶意是指 I/O 或文件访问等)?

以 Kemal 文档为例:

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

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

4

1 回答 1

1

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

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

于 2017-01-16T12:46:55.260 回答