Skip to content

Commit

Permalink
latte: added "why use"
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed May 29, 2023
1 parent ae6153c commit 7e781cb
Show file tree
Hide file tree
Showing 34 changed files with 1,377 additions and 0 deletions.
1 change: 1 addition & 0 deletions latte/bg/@left-menu.texy
@@ -1,4 +1,5 @@
- [Започване на работа |Guide]
- [Защо да използвате шаблони? |why-use]
- Концепции
- [Безопасността на първо място |Safety First]
- [Наследяване на шаблона |Template Inheritance]
Expand Down
80 changes: 80 additions & 0 deletions latte/bg/why-use.texy

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions latte/cs/@left-menu.texy
@@ -1,4 +1,5 @@
- [Začínáme s Latte |guide]
- [Proč používat šablony? |why-use]
- Koncepty
- [Bezpečnost především |safety-first]
- [Dědičnost šablon |Template Inheritance]
Expand Down
80 changes: 80 additions & 0 deletions latte/cs/why-use.texy
@@ -0,0 +1,80 @@
Proč používat šablony?
**********************


Proč bych měl použít šablonovací systém v PHP?
----------------------------------------------

Proč používat šablonovací systém v PHP, když je PHP samo o sobě šablonovací jazyk?

Pojďme si nejprve stručně zrekapitulovat historii tohoto jazyka, která je plná zajímavých zvratů. Jeden z prvních programovacích jazyků používaných pro generování HTML stránek byl jazyk C. Brzy se však ukázalo, že jeho použití pro tento účel je nepraktické. Rasmus Lerdorf proto vytvořil PHP, které usnadnilo generování dynamického HTML s jazykem C na backendu. PHP bylo tedy původně navrženo jako šablonovací jazyk, ale postupem času získalo další funkce a stalo se plnohodnotným programovacím jazykem.

Přesto stále funguje i jako šablonovací jazyk. V souboru PHP může být zapsaná HTML stránka, ve které se pomocí `<?= $foo ?>` vypisují proměnné atd.

Již v počátcích historie PHP vznikl šablonovací systém Smarty, jehož účelem bylo striktně oddělit vzhled (HTML/CSS) od aplikační logiky. Tedy záměrně poskytoval omezenější jazyk, než samotné PHP, aby vývojář nemohl například provést dotaz do databáze ze šablony apod. Na druhou stranu představoval další závislost v projektech, zvyšoval jejich složitost a programátoři se museli učit nový jazyk Smarty. Takový přínos byl sporný a nadále se pro šablony používalo prosté PHP.

V průběhu času se začaly šablonovací systémy stávat užitečnými. Přišly s konceptem [dědičnosti |template-inheritance], [sandbox režimem|sandbox] a řadou dalších funkcí, který významně zjednodušily tvorbu šablon oproti čistému PHP. Do popředí se dostalo téma bezpečnosti, existence [zranitelností jako XSS|safety-first] a nutnost [escapování|#Co je to escapování]. Šablonovací systémy přišly s autoescapováním, aby zmizelo riziko, že programátor na to zapomene a vznikne vážná bezpečnostní díra (za chvíli si ukážeme, že to má jistá úskalí).

Přínosy šablonovacích systému dnes výrazně převyšují náklady spojené s jejich nasazením. Proto má smysl je používat.


Proč je lepší Latte než třeba Twig nebo Blade?
----------------------------------------------

Důvodů je hned několik – některé jsou příjemné a jiné zásadně užitečné. Latte je kombinací příjemného s užitečným.

*Nejprve ten příjemný:* Latte má stejnou [syntaxi jako PHP|syntax#Latte rozumí PHP]. Liší se jen zápis značek, místo `<?=` a `?>` preferuje kratší `{` a `}`. To znamená, že se nemusíte učit nový jazyk. Náklady na zaškolení jsou minimální. A hlavně se při vývoji nemusíte neustále "přepínat" mezi jazykem PHP a jazykem šablony, jelikož jsou oba stejné. Na rozdíl od šablon Twig, které používají jazyk Python, a programátor se tak musí přepínat mezi dvěma odlišnými jazyky.

*A nyní důvod nesmírně užitečný*: Všechny šablonovací systémy, jako Twig, Blade nebo Smarty, přišly v průběhu evoluce s ochranou proti XSS v podobě automatického [escapování|#Co je to escapování]. Přesněji řečeno automatického volání funkce `htmlspecialchars()`. Tvůrci Latte si ale uvědomili, že tohle vůbec není správné řešení. Protože na různých místech dokumentu se escapuje různými způsoby. Naivní autoescapování je nebezpečná funkce, protože vytváří falešný pocit bezpečí.

Aby bylo autoescapování funkční a spolehlivé, musí rozeznávat, ve kterém místě dokumentu se data vypisují (říkáme jim kontexty) a podle něj volit escapovací funkci. Tedy musí být [kontextově-sensitivní|safety-first#Kontextově sensitivní escapování]. A tohle právě Latte umí. Rozumí HTML. Nevnímá šablonu jen jako řetězec znaků, ale chápe, co jsou značky, atributy atd. A proto jinak escapuje v HTML textu, jinak uvnitř HTML značky, jinak uvnitř JavaScriptu atd.

Latte je prvním a jediným šablonovacím systémem v PHP, který má kontextově citlivé escapování. Představuje tak jediný opravdu bezpečný šablonovací systém.

*A ještě jeden příjemný důvod*: Díky tomu, že Latte chápe HTML, nabízí další velmi příjemné vychytávky. Například [n:atributy|syntax#n:atributy]. Nebo schopnost [kontrolovat odkazy|safety-first#Kontrola odkazů]. A mnoho dalších.


Co je to escapování?
--------------------

Escapování je proces, která spočívá v nahrazování znaků se speciálním významem odpovídajícími sekvencemi při vkládání jednoho řetězce do druhého, aby se zabránilo nežádoucím jevům či chybám. Například když vkládáme řetězec do HTML textu, ve kterém má znak `<` zvláštní význam, jelikož označuje začátek značky, nahradíme jej odpovídající sekvencí, což je HTML entita `&lt;`. Díky tomu prohlížeč správně zobrazí symbol `<`.

Jednoduchým příkladem escapování přímo při psaní kódu v PHP je vložení uvozovky do řetězce, kdy před ni napíšeme zpětné lomítko.

Podrobněji escapování rozebíráme v kapitole [Jak se bránit XSS|safety-first#Jak se bránit XSS].


Lze v Latte provést dotaz do databáze ze šablony?
-------------------------------------------------

V šablonách lze pracovat s objekty, které do nich programátor předá. Pokud tedy programátor chce, může do šablony předat objekt databáze a nad ním provést dotaz. Pokud má takový záměr, není důvod mu v tom bránit.

Jiná situace nastává, pokud chcete dát možnost editovat šablony klientům nebo externím kodérům. V takovém případě rozhodně nechcete, aby měli přístup k databázi. Samozřejmě šabloně objekt databáze nepředáte, ale co když se k ní lze dostat skrze jiný objekt? Řešením je [sandbox režim|sandbox], který umožňuje definovat, které metody lze v šablonách volat. Díky tomu se nemusíte obávat narušení bezpečnosti.


Jaké jsou hlavní rozdíly mezi šablonovacími systémy jako Latte, Twig a Blade?
-----------------------------------------------------------------------------

Rozdíly mezi šablonovacími systémy Latte, Twig a Blade spočívají hlavně v syntaxi, zabezpečení a způsobu integrace do frameworků

- Latte: používá syntaxi jazyka PHP, což usnadňuje učení a používání. Poskytuje špičkovou ochranu proti XSS útokům.
- Twig: používá syntax jazyka Python, která se od PHP dosti liší. Escapuje bez rozlišení kontextu. Je dobře integrován do Symfony frameworku.
- Blade: používá směs PHP a vlastní syntaxe. Escapuje bez rozlišení kontextu. Je těsně integrován s Laravel funkcemi a ekosystémem.


Vyplatí se firmám používat šablonovací systém?
----------------------------------------------

Předně, náklady spojené se zaškolením, používáním a celkovým přínosem, se významně liší podle systému. Šablonovací systém Latte díky tomu, že používá syntaxi PHP, velice zjednodušuje učení pro programátory již obeznámené s tímto jazykem. Obvykle trvá několik hodin, než se programátor s Latte dostatečně seznámí. Snižuje tedy náklady na školení. Zároveň zrychluje osvojení technologie a především efektivitu při každodenním používání.

Dále Latte poskytuje vysokou úroveň ochrany proti zranitelnosti XSS díky unikátní technologii kontextově citlivého escapování. Tato ochrana je klíčová pro zajištění bezpečnosti webových aplikací a minimalizaci rizika útoků, které by mohly ohrozit uživatele či firemní data. Ochrana bezpečnosti webových aplikací je důležitá také pro udržení dobré pověsti firmy. Bezpečnostní problémy mohou způsobit ztrátu důvěry ze strany zákazníků a poškodit reputaci firmy na trhu.

Použití Latte také snižuje celkové náklady na vývoj a údržbu aplikace tím, že obojí usnadňuje. Použití šablonovacího systému se tedy jednoznačně vyplatí.


Ovlivňuje Latte výkon webových aplikací?
----------------------------------------

Ačkoliv šablony Latte jsou zpracovávány rychle, na tomto aspektu vlastně nezáleží. Důvodem je, že parsování souborů proběhne pouze jednou při prvním zobrazení. Následně jsou zkompilovány do PHP kódu, uloženy na disk a spouštěny při každém dalším požadavku, aniž by bylo nutné provádět opětovnou kompilaci.

Toto je způsob fungování v produkčním prostředí. Během vývoje se Latte šablony překompilují pokaždé, když dojde ke změně jejich obsahu, aby vývojář viděl vždy aktuální podobu.
1 change: 1 addition & 0 deletions latte/de/@left-menu.texy
@@ -1,4 +1,5 @@
- [Erste Schritte |Guide]
- [Warum Vorlagen verwenden? |why-use]
- Konzepte
- [Sicherheit zuerst |Safety First]
- [Vererbung von Vorlagen |Template Inheritance]
Expand Down
80 changes: 80 additions & 0 deletions latte/de/why-use.texy
@@ -0,0 +1,80 @@
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.
1 change: 1 addition & 0 deletions latte/el/@left-menu.texy
@@ -1,4 +1,5 @@
- [Ξεκινώντας |Guide]
- [Γιατί να χρησιμοποιήσετε πρότυπα; |why-use]
- Έννοιες
- [Πρώτα η ασφάλεια |Safety First]
- [Κληρονομικότητα προτύπων |Template Inheritance]
Expand Down

0 comments on commit 7e781cb

Please sign in to comment.