我是Crystal的新手(并且从未真正使用过红宝石),所以对这里的无知道歉!我看过ecr docs,但似乎无法在那里找到答案。
我正在考虑在Kemal中使用Embedded Crystal作为动态模板。我可以确认 - 模板只能渲染调用范围内可用的变量,还是可以从模板本身进行方法/函数调用? I.E.是否存在从模板中执行“恶意”晶体代码的可能性/风险(在这种情况下,恶意是指I / O或文件访问等)?
以Kemal文档为例:
get "/:name" do |env|
name = env.params.url["name"]
render "src/views/hello.ecr"
end
在视图中hello.ecr
- name
是模板中唯一可用的项目,还是可以从模板中调用File.delete("./foo")
?
答案 0 :(得分:1)
模板被编译成Crystal代码,您可以在其中编写任何类型的代码,例如File.delete("./foo")
,例如,如果您在模板中编写<% File.delete("./foo") %>
。
如果您担心name
会包含代码并且会以某种方式执行,那么请不要担心,这不会发生。 Crystal中的动态运行时代码执行是不可能的,因此不会有人将恶意代码注入您的模板。