模板中嵌入 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 中的动态运行时代码执行是不可能的,因此有人无法将恶意代码注入您的模板。
我是 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 中的动态运行时代码执行是不可能的,因此有人无法将恶意代码注入您的模板。