Ich bin neu in Crystal (und habe nie wirklich Ruby verwendet) also entschuldige mich für die Ignoranz hier! Ich habe mir die ecr docs angeschaut, finde aber dort keine Antwort.Eingebettete Kristallvariablen im Templating
Ich bin mit der Verwendung von Embedded Crystal für dynamische Vorlagen in Kemal. Kann ich bestätigen - können Vorlagen nur Variablen wiedergeben, die im Rahmen des Aufrufs verfügbar sind, oder kann man Methoden-/Funktionsaufrufe innerhalb der Vorlage selbst vornehmen? I.E. Gibt es irgendeine Möglichkeit/Risiko, "bösartigen" Kristallcode aus einer Vorlage heraus ausführen zu können (in diesem Fall bezieht sich böswillig auf E/A oder Dateizugriff usw.)?
Um ein Beispiel aus dem Kemal docs zu nehmen:
get "/:name" do |env|
name = env.params.url["name"]
render "src/views/hello.ecr"
end
Nach Ansicht hello.ecr
- ist name
das einzige Element, das in der Vorlage zur Verfügung stehen wird, oder könnte einen Anruf File.delete("./foo")
von in der Vorlage zum Beispiel?
Vielen Dank @asterite für Ihre schnelle Antwort. Meine Sorge ist nicht so sehr, dass die Variablen Code enthalten würden, sondern ich suchte nach einer Lösung, um extern bereitgestellte HTML-Templates zu parsen (deren Inhalt ich im Voraus nicht kennen werde) und möchte jede Möglichkeit der Ausführung von HTML vermeiden code jenseits von Basisvariablen und Kontrollstrukturen (wenn, sonst, außer etc.) wenn möglich. – corkington
[Dieser Ausschnitt] (https://groups.google.com/forum/#!topic/crystal-lang/jX_dRFSdh78), obwohl ziemlich alt, Details was ich gesucht habe: "Eine einfachere Lösung wäre zu habe ein Template-System, wo man keinen beliebigen Code ausführen kann, sonst könnte man eine Art von for iterating haben und das wars. Zur Laufzeit würden Sie diese Vorlage interpretieren, denke ich. Sie würden ein Objekt an diese Vorlage übergeben Es kann ein Hash sein, der die Werte enthält. Oder vielleicht ein Struct ... " Ich schätze, dies würde Laufzeit Interpretation erfordern, aber das würde für diesen speziellen Fall ausreichen. Irgendwelche Ideen? – corkington
@corkington mit ECR gibt es absolut keine Möglichkeit, beliebigen Code auszuführen, weil Laufzeitausführung von beliebigem Code in Crystal unmöglich ist – asterite