Nette Documentation Preview

syntax
Warum Vorlagen verwenden?
*************************


Warum sollte ich ein Template-System in PHP verwenden? .[#toc-why-should-i-use-a-templating-system-in-php]
----------------------------------------------------------------------------------------------------------

Warum sollte man ein Template-System in PHP verwenden, wenn PHP selbst eine Vorlagensprache ist?

Lassen Sie uns zunächst kurz die Geschichte dieser Sprache rekapitulieren, die voller interessanter Wendungen ist. Eine der ersten Programmiersprachen, die zum Erstellen von HTML-Seiten verwendet wurde, war die Sprache C. Es stellte sich jedoch bald heraus, dass ihre Verwendung für diesen Zweck unpraktisch war. Rasmus Lerdorf schuf daher PHP, das die Erstellung von dynamischem HTML mit der Sprache C auf dem Backend erleichterte. PHP wurde ursprünglich als Vorlagensprache entwickelt, erhielt im Laufe der Zeit jedoch weitere Funktionen und wurde zu einer vollwertigen Programmiersprache.

Dennoch funktioniert es immer noch als Vorlagensprache. In einer PHP-Datei kann eine HTML-Seite geschrieben werden, in der Variablen usw. mit `<?= $foo ?>` ausgegeben werden.

In den Anfängen der PHP-Geschichte entstand das Template-System Smarty, dessen Ziel es war, das Aussehen (HTML/CSS) strikt von der Anwendungslogik zu trennen. Es bot also absichtlich eine eingeschränktere Sprache als PHP selbst, damit der Entwickler zum Beispiel keine Datenbankabfrage aus einer Vorlage ausführen konnte usw. Auf der anderen Seite stellte es eine zusätzliche Abhängigkeit in Projekten dar, erhöhte ihre Komplexität und die Programmierer mussten die neue Smarty-Sprache erlernen. Dieser Nutzen war umstritten und PHP wurde weiterhin für Vorlagen verwendet.

Im Laufe der Zeit wurden Vorlagensysteme nützlicher. Sie führten Konzepte wie [Vererbung|template-inheritance], [Sandbox-Modus|sandbox] und eine Reihe weiterer Funktionen ein, die die Erstellung von Vorlagen im Vergleich zu reinem PHP erheblich vereinfachten. Sicherheit wurde ein zentrales Thema, die Existenz von [Schwachstellen wie XSS|safety-first] und die Notwendigkeit des [Escapings|#What is escaping]. Vorlagensysteme führten das Autoescaping ein, um das Risiko zu beseitigen, dass der Programmierer es vergisst und eine schwerwiegende Sicherheitslücke entsteht (wir werden in Kürze sehen, dass dies einige Fallstricke hat).

Die Vorteile von Vorlagensystemen überwiegen heute deutlich die Kosten für deren Implementierung. Daher ist es sinnvoll, sie zu verwenden.


Warum ist Latte besser als Twig oder Blade? .[#toc-why-is-latte-better-than-twig-or-blade]
------------------------------------------------------------------------------------------

Es gibt mehrere Gründe - einige sind angenehm und andere grundlegend nützlich. Latte ist eine Kombination aus angenehm und nützlich.

*Zuerst das Angenehme:* Latte hat die gleiche [Syntax wie PHP|syntax#Latte Understands PHP]. Es unterscheidet sich nur in der Schreibweise der Tags, statt `<?=` und `?>` bevorzugt es die kürzeren `{` und `}`. Das bedeutet, dass Sie keine neue Sprache lernen müssen. Die Schulungskosten sind minimal. Vor allem müssen Sie sich bei der Entwicklung nicht ständig zwischen der PHP-Sprache und der Vorlagensprache "umschalten", da beide gleich sind. Im Gegensatz zu Twig-Vorlagen, die Python verwenden, und der Programmierer muss daher zwischen zwei verschiedenen Sprachen wechseln.

*Und nun ein äußerst nützlicher Grund:* Alle Vorlagensysteme wie Twig, Blade oder Smarty haben im Laufe ihrer Evolution Schutz gegen XSS in Form von automatischem [Escaping|#What is escaping] eingeführt. Genauer gesagt, automatisches Aufrufen der Funktion `htmlspecialchars()`. Die Schöpfer von Latte haben jedoch erkannt, dass dies keine gute Lösung ist. Denn an verschiedenen Stellen im Dokument wird auf unterschiedliche Weise escaped. Naives Autoescaping ist eine gefährliche Funktion, weil es ein falsches Gefühl von Sicherheit erzeugt.

Damit Autoescaping funktioniert und zuverlässig ist, muss es erkennen, an welcher Stelle im Dokument Daten ausgegeben werden (wir nennen sie Kontexte) und die Escaping-Funktion entsprechend auswählen. Es muss also [kontextsensitiv sein|safety-first#Context-Aware Escaping]. Und das kann Latte. Es versteht HTML. Es sieht die Vorlage nicht nur als Zeichenkette, sondern versteht, was Tags, Attribute usw. sind. Daher escapet es im HTML-Text, innerhalb eines HTML-Tags, innerhalb von JavaScript usw. unterschiedlich.

Latte ist das erste und einzige Vorlagensystem in PHP, das kontextsensitives Escaping bietet. Es ist das einzige wirklich sichere Vorlagensystem.

*Und noch ein angenehmer Grund:* Da Latte HTML versteht, bietet es einige sehr angenehme Extras. Zum Beispiel [n:attribute|syntax#n:attributes]. Oder die Fähigkeit, [Links zu überprüfen|safety-first#Link checking]. Und vieles mehr.


Was ist Escaping? .[#toc-what-is-escaping]
------------------------------------------

Escaping ist ein Prozess, bei dem Zeichen mit besonderer Bedeutung durch entsprechende Sequenzen ersetzt werden, wenn eine Zeichenfolge in eine andere eingefügt wird, um unerwünschte Effekte oder Fehler zu vermeiden. Wenn wir beispielsweise eine Zeichenkette in einen HTML-Text einfügen, in dem das Zeichen `<` eine besondere Bedeutung hat, weil es den Anfang eines Tags anzeigt, ersetzen wir es durch die entsprechende Sequenz, nämlich die HTML-Entität `&lt;`. Dadurch kann der Browser das Symbol `<` korrekt anzeigen.

Ein einfaches Beispiel für das direkte Escaping beim Schreiben von PHP-Code ist das Einfügen eines Anführungszeichens in eine Zeichenkette, indem ein Backslash davor gesetzt wird.

Wir besprechen Escaping ausführlicher in dem Kapitel [Wie man sich gegen XSS verteidigt |safety-first#How to Defend Against XSS?].


Kann eine Datenbankabfrage von einer Latte-Vorlage aus ausgeführt werden? .[#toc-can-a-database-query-be-executed-from-a-latte-template]
----------------------------------------------------------------------------------------------------------------------------------------

In Vorlagen können Sie mit Objekten arbeiten, die der Programmierer an sie übergibt. Wenn der Programmierer das möchte, kann er ein Datenbankobjekt an die Vorlage übergeben und eine Abfrage durchführen. Wenn er dies beabsichtigt, gibt es keinen Grund, ihn daran zu hindern.

Anders verhält es sich, wenn Sie Kunden oder externen Programmierern die Möglichkeit geben wollen, Vorlagen zu bearbeiten. In diesem Fall wollen Sie auf keinen Fall, dass sie Zugriff auf die Datenbank haben. Natürlich werden Sie das Datenbankobjekt nicht an die Vorlage übergeben, aber was ist, wenn über ein anderes Objekt darauf zugegriffen werden kann? Die Lösung ist der [Sandbox-Modus |sandbox], mit dem Sie festlegen können, welche Methoden in Vorlagen aufgerufen werden können. So müssen Sie sich keine Sorgen über Sicherheitslücken machen.


Was sind die Hauptunterschiede zwischen Templating-Systemen wie Latte, Twig und Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Die Unterschiede zwischen Templating-Systemen wie Latte, Twig und Blade liegen hauptsächlich in der Syntax, der Sicherheit und der Integration mit Frameworks:

- Latte: verwendet die Syntax der PHP-Sprache und ist daher leichter zu erlernen und zu verwenden. Es bietet einen erstklassigen Schutz gegen XSS-Angriffe.
- Twig: verwendet eine Python-ähnliche Syntax, die sich deutlich von PHP unterscheidet. Es bricht ohne Kontextunterscheidung aus. Es ist gut mit dem Symfony-Framework integriert.
- Blade: verwendet eine Mischung aus PHP und benutzerdefinierter Syntax. Es bricht ohne Kontextunterscheidung aus. Es ist eng mit den Funktionen und dem Ökosystem von Laravel integriert.


Lohnt es sich für Unternehmen, ein Templating-System zu verwenden? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system]
----------------------------------------------------------------------------------------------------------------------------------

Zunächst einmal sind die Kosten für die Schulung, die Nutzung und den Gesamtnutzen je nach System sehr unterschiedlich. Das Templating-System Latte vereinfacht dank der Verwendung der PHP-Syntax das Lernen für Programmierer, die mit dieser Sprache bereits vertraut sind, erheblich. In der Regel benötigt ein Programmierer nur wenige Stunden, um sich ausreichend mit Latte vertraut zu machen, was die Schulungskosten senkt und die Übernahme der Technologie und vor allem die Effizienz im täglichen Gebrauch beschleunigt.

Darüber hinaus bietet Latte dank seiner einzigartigen kontextabhängigen Escape-Technologie ein hohes Maß an Schutz vor XSS-Schwachstellen. Dieser Schutz ist entscheidend, um die Sicherheit von Webanwendungen zu gewährleisten und das Risiko von Angriffen zu minimieren, die Benutzer oder Unternehmensdaten gefährden könnten. Die Sicherheit von Webanwendungen ist auch wichtig für die Aufrechterhaltung des guten Rufs eines Unternehmens. Sicherheitsprobleme können zu einem Vertrauensverlust bei den Kunden führen und den Ruf des Unternehmens auf dem Markt schädigen.

Die Verwendung von Latte senkt auch die Gesamtkosten für Entwicklung und Wartung, da beides einfacher wird. Daher lohnt sich der Einsatz eines Templating-Systems auf jeden Fall.


Beeinträchtigt Latte die Leistung von Webanwendungen? .[#toc-does-latte-affect-the-performance-of-web-applications]
-------------------------------------------------------------------------------------------------------------------

Obwohl Latte-Vorlagen schnell verarbeitet werden, ist dieser Aspekt nicht wirklich von Bedeutung. Der Grund dafür ist, dass das Parsen der Dateien nur einmal bei der ersten Anzeige erfolgt. Anschließend werden sie in PHP-Code kompiliert, auf der Festplatte gespeichert und bei jeder nachfolgenden Anfrage ausgeführt, ohne dass eine erneute Kompilierung erforderlich ist.

So funktioniert es auch in einer Produktionsumgebung. Während der Entwicklung werden die Latte-Vorlagen jedes Mal neu kompiliert, wenn sich ihr Inhalt ändert, so dass der Entwickler immer die aktuelle Version sieht.

Warum Vorlagen verwenden?

Warum sollte ich ein Template-System in PHP verwenden?

Warum sollte man ein Template-System in PHP verwenden, wenn PHP selbst eine Vorlagensprache ist?

Lassen Sie uns zunächst kurz die Geschichte dieser Sprache rekapitulieren, die voller interessanter Wendungen ist. Eine der ersten Programmiersprachen, die zum Erstellen von HTML-Seiten verwendet wurde, war die Sprache C. Es stellte sich jedoch bald heraus, dass ihre Verwendung für diesen Zweck unpraktisch war. Rasmus Lerdorf schuf daher PHP, das die Erstellung von dynamischem HTML mit der Sprache C auf dem Backend erleichterte. PHP wurde ursprünglich als Vorlagensprache entwickelt, erhielt im Laufe der Zeit jedoch weitere Funktionen und wurde zu einer vollwertigen Programmiersprache.

Dennoch funktioniert es immer noch als Vorlagensprache. In einer PHP-Datei kann eine HTML-Seite geschrieben werden, in der Variablen usw. mit <?= $foo ?> ausgegeben werden.

In den Anfängen der PHP-Geschichte entstand das Template-System Smarty, dessen Ziel es war, das Aussehen (HTML/CSS) strikt von der Anwendungslogik zu trennen. Es bot also absichtlich eine eingeschränktere Sprache als PHP selbst, damit der Entwickler zum Beispiel keine Datenbankabfrage aus einer Vorlage ausführen konnte usw. Auf der anderen Seite stellte es eine zusätzliche Abhängigkeit in Projekten dar, erhöhte ihre Komplexität und die Programmierer mussten die neue Smarty-Sprache erlernen. Dieser Nutzen war umstritten und PHP wurde weiterhin für Vorlagen verwendet.

Im Laufe der Zeit wurden Vorlagensysteme nützlicher. Sie führten Konzepte wie Vererbung, Sandbox-Modus und eine Reihe weiterer Funktionen ein, die die Erstellung von Vorlagen im Vergleich zu reinem PHP erheblich vereinfachten. Sicherheit wurde ein zentrales Thema, die Existenz von Schwachstellen wie XSS und die Notwendigkeit des Escapings. Vorlagensysteme führten das Autoescaping ein, um das Risiko zu beseitigen, dass der Programmierer es vergisst und eine schwerwiegende Sicherheitslücke entsteht (wir werden in Kürze sehen, dass dies einige Fallstricke hat).

Die Vorteile von Vorlagensystemen überwiegen heute deutlich die Kosten für deren Implementierung. Daher ist es sinnvoll, sie zu verwenden.

Warum ist Latte besser als Twig oder Blade?

Es gibt mehrere Gründe – einige sind angenehm und andere grundlegend nützlich. Latte ist eine Kombination aus angenehm und nützlich.

Zuerst das Angenehme: Latte hat die gleiche Syntax wie PHP. Es unterscheidet sich nur in der Schreibweise der Tags, statt <?= und ?> bevorzugt es die kürzeren { und }. Das bedeutet, dass Sie keine neue Sprache lernen müssen. Die Schulungskosten sind minimal. Vor allem müssen Sie sich bei der Entwicklung nicht ständig zwischen der PHP-Sprache und der Vorlagensprache „umschalten“, da beide gleich sind. Im Gegensatz zu Twig-Vorlagen, die Python verwenden, und der Programmierer muss daher zwischen zwei verschiedenen Sprachen wechseln.

Und nun ein äußerst nützlicher Grund: Alle Vorlagensysteme wie Twig, Blade oder Smarty haben im Laufe ihrer Evolution Schutz gegen XSS in Form von automatischem Escaping eingeführt. Genauer gesagt, automatisches Aufrufen der Funktion htmlspecialchars(). Die Schöpfer von Latte haben jedoch erkannt, dass dies keine gute Lösung ist. Denn an verschiedenen Stellen im Dokument wird auf unterschiedliche Weise escaped. Naives Autoescaping ist eine gefährliche Funktion, weil es ein falsches Gefühl von Sicherheit erzeugt.

Damit Autoescaping funktioniert und zuverlässig ist, muss es erkennen, an welcher Stelle im Dokument Daten ausgegeben werden (wir nennen sie Kontexte) und die Escaping-Funktion entsprechend auswählen. Es muss also kontextsensitiv sein. Und das kann Latte. Es versteht HTML. Es sieht die Vorlage nicht nur als Zeichenkette, sondern versteht, was Tags, Attribute usw. sind. Daher escapet es im HTML-Text, innerhalb eines HTML-Tags, innerhalb von JavaScript usw. unterschiedlich.

Latte ist das erste und einzige Vorlagensystem in PHP, das kontextsensitives Escaping bietet. Es ist das einzige wirklich sichere Vorlagensystem.

Und noch ein angenehmer Grund: Da Latte HTML versteht, bietet es einige sehr angenehme Extras. Zum Beispiel n:attribute. Oder die Fähigkeit, Links zu überprüfen. Und vieles mehr.

Was ist Escaping?

Escaping ist ein Prozess, bei dem Zeichen mit besonderer Bedeutung durch entsprechende Sequenzen ersetzt werden, wenn eine Zeichenfolge in eine andere eingefügt wird, um unerwünschte Effekte oder Fehler zu vermeiden. Wenn wir beispielsweise eine Zeichenkette in einen HTML-Text einfügen, in dem das Zeichen < eine besondere Bedeutung hat, weil es den Anfang eines Tags anzeigt, ersetzen wir es durch die entsprechende Sequenz, nämlich die HTML-Entität &lt;. Dadurch kann der Browser das Symbol < korrekt anzeigen.

Ein einfaches Beispiel für das direkte Escaping beim Schreiben von PHP-Code ist das Einfügen eines Anführungszeichens in eine Zeichenkette, indem ein Backslash davor gesetzt wird.

Wir besprechen Escaping ausführlicher in dem Kapitel Wie man sich gegen XSS verteidigt.

Kann eine Datenbankabfrage von einer Latte-Vorlage aus ausgeführt werden?

In Vorlagen können Sie mit Objekten arbeiten, die der Programmierer an sie übergibt. Wenn der Programmierer das möchte, kann er ein Datenbankobjekt an die Vorlage übergeben und eine Abfrage durchführen. Wenn er dies beabsichtigt, gibt es keinen Grund, ihn daran zu hindern.

Anders verhält es sich, wenn Sie Kunden oder externen Programmierern die Möglichkeit geben wollen, Vorlagen zu bearbeiten. In diesem Fall wollen Sie auf keinen Fall, dass sie Zugriff auf die Datenbank haben. Natürlich werden Sie das Datenbankobjekt nicht an die Vorlage übergeben, aber was ist, wenn über ein anderes Objekt darauf zugegriffen werden kann? Die Lösung ist der Sandbox-Modus, mit dem Sie festlegen können, welche Methoden in Vorlagen aufgerufen werden können. So müssen Sie sich keine Sorgen über Sicherheitslücken machen.

Was sind die Hauptunterschiede zwischen Templating-Systemen wie Latte, Twig und Blade?

Die Unterschiede zwischen Templating-Systemen wie Latte, Twig und Blade liegen hauptsächlich in der Syntax, der Sicherheit und der Integration mit Frameworks:

  • Latte: verwendet die Syntax der PHP-Sprache und ist daher leichter zu erlernen und zu verwenden. Es bietet einen erstklassigen Schutz gegen XSS-Angriffe.
  • Twig: verwendet eine Python-ähnliche Syntax, die sich deutlich von PHP unterscheidet. Es bricht ohne Kontextunterscheidung aus. Es ist gut mit dem Symfony-Framework integriert.
  • Blade: verwendet eine Mischung aus PHP und benutzerdefinierter Syntax. Es bricht ohne Kontextunterscheidung aus. Es ist eng mit den Funktionen und dem Ökosystem von Laravel integriert.

Lohnt es sich für Unternehmen, ein Templating-System zu verwenden?

Zunächst einmal sind die Kosten für die Schulung, die Nutzung und den Gesamtnutzen je nach System sehr unterschiedlich. Das Templating-System Latte vereinfacht dank der Verwendung der PHP-Syntax das Lernen für Programmierer, die mit dieser Sprache bereits vertraut sind, erheblich. In der Regel benötigt ein Programmierer nur wenige Stunden, um sich ausreichend mit Latte vertraut zu machen, was die Schulungskosten senkt und die Übernahme der Technologie und vor allem die Effizienz im täglichen Gebrauch beschleunigt.

Darüber hinaus bietet Latte dank seiner einzigartigen kontextabhängigen Escape-Technologie ein hohes Maß an Schutz vor XSS-Schwachstellen. Dieser Schutz ist entscheidend, um die Sicherheit von Webanwendungen zu gewährleisten und das Risiko von Angriffen zu minimieren, die Benutzer oder Unternehmensdaten gefährden könnten. Die Sicherheit von Webanwendungen ist auch wichtig für die Aufrechterhaltung des guten Rufs eines Unternehmens. Sicherheitsprobleme können zu einem Vertrauensverlust bei den Kunden führen und den Ruf des Unternehmens auf dem Markt schädigen.

Die Verwendung von Latte senkt auch die Gesamtkosten für Entwicklung und Wartung, da beides einfacher wird. Daher lohnt sich der Einsatz eines Templating-Systems auf jeden Fall.

Beeinträchtigt Latte die Leistung von Webanwendungen?

Obwohl Latte-Vorlagen schnell verarbeitet werden, ist dieser Aspekt nicht wirklich von Bedeutung. Der Grund dafür ist, dass das Parsen der Dateien nur einmal bei der ersten Anzeige erfolgt. Anschließend werden sie in PHP-Code kompiliert, auf der Festplatte gespeichert und bei jeder nachfolgenden Anfrage ausgeführt, ohne dass eine erneute Kompilierung erforderlich ist.

So funktioniert es auch in einer Produktionsumgebung. Während der Entwicklung werden die Latte-Vorlagen jedes Mal neu kompiliert, wenn sich ihr Inhalt ändert, so dass der Entwickler immer die aktuelle Version sieht.