Я новичок в Crystal (и никогда не использовал рубин), поэтому приношу извинения за незнание здесь! Я посмотрел на ecr docs, но, похоже, не нашел ответа.Встроенные переменные кристалла в шаблонах
Я ищу использование встроенного кристалла для динамических шаблонов в Kemal. Могу ли я подтвердить - могут ли шаблоны отображать только переменные, доступные в области вызова, или же можно вызвать вызовы метода/функции из самого шаблона? И.Е. есть ли вероятность/риск возможности выполнить «вредоносный» хрустальный код из шаблона (в этом случае вредоносное относится к вводу-выводу или доступу к файлам и т. д.)?
Возьмем пример из документации Кемаль:
get "/:name" do |env|
name = env.params.url["name"]
render "src/views/hello.ecr"
end
По мнению hello.ecr
- это name
единственный элемент, который будет доступен в шаблоне, или может один вызов File.delete("./foo")
в шаблоне, например?
Благодарим @asterite за ваш быстрый ответ. Моя проблема заключается не столько в том, что переменные будут содержать код, а в том, что я искал решение для синтаксического анализа внешних шаблонов html, которые я могу/не знаю заранее, и хотел бы избежать любой возможности выполнения код за базовыми переменными и структурами управления (если, кроме того, если есть и т. д.), если это возможно. – corkington
[Этот фрагмент] (https://groups.google.com/forum/#!topic/crystal-lang/jX_dRFSdh78), хотя он довольно старый, детали, которые я искал: «Проще было бы решить проблему есть система шаблонов, в которой вы не можете выполнить произвольный код. У вас может быть if, else, своего рода для итерации, и это все. Тогда во время выполнения вы могли бы интерпретировать этот шаблон, я думаю. Вы передали бы объект этому шаблону Это может быть хэш, содержащий значения, или, может быть, struct ... » Я ценю, что для этого потребуется интерпретация времени выполнения, но этого было бы достаточно для этого конкретного случая. Есть идеи? – corkington
@corkington с ECR нет абсолютно никакого способа выполнить произвольный код, потому что выполнение исполнения произвольного кода невозможно в Crystal – asterite