Встроенные переменные 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 невозможно, поэтому никто не сможет внедрить вредоносный код в ваши шаблоны.

Другие вопросы по тегам