Встроенные переменные Crystal в шаблонах
Я новичок в Crystal (и никогда не использовал рубин), поэтому извиняюсь за невежество здесь! Я посмотрел на документацию ECR, но не могу найти там ответа.
Я смотрю на использование Embedded Crystal для динамических шаблонов в Kemal. Могу ли я подтвердить - могут ли шаблоны отображать только те переменные, которые доступны в области вызова, или можно выполнять вызовы методов / функций из самого шаблона? IE, есть ли вероятность / риск выполнения "вредоносного" кристаллического кода из шаблона (в данном случае под "вредоносным" понимается ввод / вывод или доступ к файлу и т. Д.)?
Чтобы взять пример из документации Kemal:
get "/:name" do |env|
name = env.params.url["name"]
render "src/views/hello.ecr"
end
В представлении hello.ecr
- является name
единственный элемент, который будет доступен в шаблоне, или один вызов File.delete("./foo")
из шаблона например?
1 ответ
Шаблон скомпилирован в код Crystal, вы можете написать любой код, например, File.delete("./foo")
Например, если вы пишете <% File.delete("./foo") %>
внутри вашего шаблона.
Если вы беспокоитесь, что name
будет содержать код, и это как-то будет выполнено, тогда не беспокойтесь, этого не произойдет. Динамическое выполнение кода во время выполнения в Crystal невозможно, поэтому никто не сможет внедрить вредоносный код в ваши шаблоны.