Warum Templates verwenden?
- Warum sollte ich ein Templating-System in PHP verwenden?
- Warum ist Latte besser als z. B. Twig oder Blade?
- Was ist Escaping?
- Kann man in Latte eine Datenbankabfrage aus dem Template heraus ausführen?
- Was sind die Hauptunterschiede zwischen Templating-Systemen wie Latte, Twig und Blade?
- Lohnt es sich für Unternehmen, ein Templating-System zu verwenden?
- Beeinflusst Latte die Leistung von Webanwendungen?
Warum sollte ich ein Templating-System in PHP verwenden?
Warum ein Templating-System in PHP verwenden, wenn PHP selbst eine Templating-Sprache ist?
Lassen Sie uns zunächst kurz die Geschichte dieser Sprache rekapitulieren, die voller interessanter Wendungen ist. Eine der ersten Programmiersprachen, die zur Generierung von HTML-Seiten verwendet wurde, war C. Es stellte sich jedoch bald heraus, dass ihre Verwendung für diesen Zweck unpraktisch war. Rasmus Lerdorf entwickelte daher PHP, das die Generierung von dynamischem HTML mit C im Backend erleichterte. PHP war also ursprünglich als Templating-Sprache konzipiert, erhielt aber im Laufe der Zeit weitere Funktionen und wurde zu einer vollwertigen Programmiersprache.
Dennoch funktioniert es immer noch auch als Templating-Sprache. In einer PHP-Datei kann eine HTML-Seite geschrieben werden, in
der Variablen mit <?= $foo ?>
usw. ausgegeben werden.
Bereits in den Anfängen der PHP-Geschichte entstand das Templating-System Smarty, dessen Zweck es war, das Aussehen (HTML/CSS) streng von der Anwendungslogik zu trennen. Es bot also bewusst eine eingeschränktere Sprache als PHP selbst an, damit der Entwickler beispielsweise keine Datenbankabfrage aus dem Template heraus ausführen konnte usw. Andererseits stellte es eine zusätzliche Abhängigkeit in Projekten dar, erhöhte deren Komplexität und Programmierer mussten eine neue Smarty-Sprache lernen. Ein solcher Nutzen war umstritten, und für Templates wurde weiterhin reines PHP verwendet.
Im Laufe der Zeit begannen Templating-Systeme nützlich zu werden. Sie brachten Konzepte wie Vererbung, Sandbox-Modus und eine Reihe weiterer Funktionen mit, die die Erstellung von Templates im Vergleich zu reinem PHP erheblich vereinfachten. Das Thema Sicherheit, die Existenz von Schwachstellen wie XSS und die Notwendigkeit des Escapings rückten in den Vordergrund. Templating-Systeme führten Autoescaping ein, um das Risiko zu beseitigen, dass ein Programmierer dies vergisst und eine ernsthafte Sicherheitslücke entsteht (wir werden gleich sehen, dass dies gewisse Tücken hat).
Die Vorteile von Templating-Systemen überwiegen heute deutlich die mit ihrer Einführung verbundenen Kosten. Daher ist es sinnvoll, sie zu verwenden.
Warum ist Latte besser als z. B. Twig oder Blade?
Dafür gibt es gleich mehrere Gründe – einige sind angenehm und andere grundlegend nützlich. Latte ist eine Kombination aus Angenehmem und Nützlichem.
Zuerst das Angenehme: Latte hat die gleiche Syntax
wie PHP. Nur die Schreibweise der Tags unterscheidet sich, anstelle von <?=
und ?>
bevorzugt
es kürzere {
und }
. Das bedeutet, dass Sie keine neue Sprache lernen müssen. Die Schulungskosten sind
minimal. Und vor allem müssen Sie während der Entwicklung nicht ständig zwischen der PHP-Sprache und der Template-Sprache
“umschalten”, da beide gleich sind. Im Gegensatz zu Twig-Templates, die die Python-Sprache verwenden, sodass der Programmierer
zwischen zwei verschiedenen Sprachen wechseln muss.
Und nun der äußerst nützliche Grund: Alle Templating-Systeme wie Twig, Blade oder Smarty haben im Laufe der
Evolution einen Schutz gegen XSS in Form von automatischem Escaping eingeführt. Genauer
gesagt, das automatische Aufrufen der Funktion htmlspecialchars()
. Die Entwickler von Latte haben jedoch erkannt,
dass dies überhaupt keine richtige Lösung ist. Denn an verschiedenen Stellen im Dokument wird auf unterschiedliche Weise
escaped. Naives Autoescaping ist eine gefährliche Funktion, da es ein falsches Gefühl von Sicherheit erzeugt.
Damit Autoescaping funktionsfähig und zuverlässig ist, muss es erkennen, an welcher Stelle im Dokument Daten ausgegeben werden (wir nennen sie Kontexte) und entsprechend die Escaping-Funktion wählen. Es muss also kontextsensitiv sein. Und genau das kann Latte. Es versteht HTML. Es betrachtet das Template nicht nur als Zeichenkette, sondern versteht, was Tags, Attribute usw. sind. Und deshalb escaped es im HTML-Text anders, innerhalb eines HTML-Tags anders, innerhalb von JavaScript anders usw.
Latte ist das erste und einzige Templating-System in PHP, das kontextsensitives Escaping bietet. Es stellt somit das einzige wirklich sichere Templating-System dar.
Und noch ein angenehmer Grund: Da Latte HTML versteht, bietet es weitere sehr angenehme Annehmlichkeiten. 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
Zeichenkette in eine andere eingefügt wird, um unerwünschte Phänomene oder Fehler zu vermeiden. Wenn wir beispielsweise eine
Zeichenkette in HTML-Text einfügen, in dem das Zeichen <
eine besondere Bedeutung hat, da es den Anfang eines
Tags kennzeichnet, ersetzen wir es durch die entsprechende Sequenz, nämlich die HTML-Entität <
. Dadurch
zeigt der Browser das Symbol <
korrekt an.
Ein einfaches Beispiel für Escaping direkt beim Schreiben von Code in PHP ist das Einfügen eines Anführungszeichens in eine Zeichenkette, indem wir einen Backslash davor schreiben.
Wir behandeln Escaping ausführlicher im Kapitel Wie man sich vor XSS schützt.
Kann man in Latte eine Datenbankabfrage aus dem Template heraus ausführen?
In Templates kann man mit Objekten arbeiten, die der Programmierer an sie übergibt. Wenn der Programmierer dies also möchte, kann er ein Datenbankobjekt an das Template übergeben und darauf eine Abfrage ausführen. Wenn er eine solche Absicht hat, gibt es keinen Grund, ihn daran zu hindern.
Eine andere Situation tritt ein, wenn Sie Kunden oder externen Codierern die Möglichkeit geben möchten, Templates zu bearbeiten. In diesem Fall möchten Sie definitiv nicht, dass sie Zugriff auf die Datenbank haben. Natürlich übergeben Sie das Datenbankobjekt nicht an das Template, aber was ist, wenn man über ein anderes Objekt darauf zugreifen kann? Die Lösung ist der Sandbox-Modus, der es ermöglicht zu definieren, welche Methoden in Templates aufgerufen werden können. Dadurch müssen Sie sich keine Sorgen um Sicherheitsverletzungen machen.
Was sind die Hauptunterschiede zwischen Templating-Systemen wie Latte, Twig und Blade?
Die Unterschiede zwischen den Templating-Systemen Latte, Twig und Blade liegen hauptsächlich in der Syntax, der Sicherheit und der Art der Integration in Frameworks:
- Latte: verwendet die Syntax der PHP-Sprache, was das Erlernen und Verwenden erleichtert. Bietet erstklassigen Schutz gegen XSS-Angriffe durch kontextsensitives Escaping.
- Twig: verwendet die Syntax der Python-Sprache, die sich stark von PHP unterscheidet. Escaped ohne Kontextunterscheidung. Ist gut in das Symfony-Framework integriert.
- Blade: verwendet eine Mischung aus PHP und eigener Syntax. Escaped ohne Kontextunterscheidung. Ist eng mit den Laravel-Funktionen und dem Ökosystem integriert.
Lohnt es sich für Unternehmen, ein Templating-System zu verwenden?
Zunächst einmal unterscheiden sich die Kosten für Schulung, Nutzung und der Gesamtnutzen je nach System erheblich. Das Templating-System Latte vereinfacht dank der Verwendung der PHP-Syntax das Erlernen für Programmierer, die bereits mit dieser Sprache vertraut sind, erheblich. Normalerweise dauert es nur wenige Stunden, bis sich ein Programmierer ausreichend mit Latte vertraut gemacht hat. Es senkt also die Schulungskosten. Gleichzeitig beschleunigt es die Aneignung der Technologie und vor allem die Effizienz bei der täglichen Nutzung.
Darüber hinaus bietet Latte ein hohes Maß an Schutz vor XSS-Schwachstellen dank der einzigartigen Technologie des kontextsensitiven Escapings. Dieser Schutz ist entscheidend für die Gewährleistung der Sicherheit von Webanwendungen und die Minimierung des Risikos von Angriffen, die Benutzer oder Unternehmensdaten gefährden könnten. Der Schutz der Sicherheit von Webanwendungen ist auch wichtig für die Aufrechterhaltung eines guten Rufs des Unternehmens. Sicherheitsprobleme können zu einem Vertrauensverlust seitens der 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 der Anwendung, indem beides erleichtert wird. Die Verwendung eines Templating-Systems lohnt sich also eindeutig.
Beeinflusst Latte die Leistung von Webanwendungen?
Obwohl Latte-Templates schnell verarbeitet werden, ist dieser Aspekt eigentlich nicht entscheidend. 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 weiteren Anfrage ausgeführt, ohne dass eine erneute Kompilierung erforderlich ist.
Dies ist die Funktionsweise in einer Produktionsumgebung. Während der Entwicklung werden Latte-Templates jedes Mal neu kompiliert, wenn sich ihr Inhalt ändert, damit der Entwickler immer die aktuelle Version sieht.