From 35f384dbbaa02f5d4f28acdc8bc334de8ab807c7 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 18 Apr 2023 18:01:30 +0200 Subject: [PATCH] latte: added "why use" --- latte/bg/@left-menu.texy | 1 + latte/bg/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/cs/@left-menu.texy | 1 + latte/cs/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/de/@left-menu.texy | 1 + latte/de/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/el/@left-menu.texy | 1 + latte/el/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/en/@left-menu.texy | 1 + latte/en/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/es/@left-menu.texy | 1 + latte/es/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/fr/@left-menu.texy | 1 + latte/fr/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/hu/@left-menu.texy | 1 + latte/hu/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/it/@left-menu.texy | 1 + latte/it/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/ja/@left-menu.texy | 1 + latte/ja/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/pl/@left-menu.texy | 1 + latte/pl/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/pt/@left-menu.texy | 1 + latte/pt/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/ro/@left-menu.texy | 1 + latte/ro/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/ru/@left-menu.texy | 1 + latte/ru/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/sl/@left-menu.texy | 1 + latte/sl/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/tr/@left-menu.texy | 1 + latte/tr/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ latte/uk/@left-menu.texy | 1 + latte/uk/why-use.texy | 80 ++++++++++++++++++++++++++++++++++++++++ 34 files changed, 1377 insertions(+) create mode 100644 latte/bg/why-use.texy create mode 100644 latte/cs/why-use.texy create mode 100644 latte/de/why-use.texy create mode 100644 latte/el/why-use.texy create mode 100644 latte/en/why-use.texy create mode 100644 latte/es/why-use.texy create mode 100644 latte/fr/why-use.texy create mode 100644 latte/hu/why-use.texy create mode 100644 latte/it/why-use.texy create mode 100644 latte/ja/why-use.texy create mode 100644 latte/pl/why-use.texy create mode 100644 latte/pt/why-use.texy create mode 100644 latte/ro/why-use.texy create mode 100644 latte/ru/why-use.texy create mode 100644 latte/sl/why-use.texy create mode 100644 latte/tr/why-use.texy create mode 100644 latte/uk/why-use.texy diff --git a/latte/bg/@left-menu.texy b/latte/bg/@left-menu.texy index 2edb276425..eaeb13b43f 100644 --- a/latte/bg/@left-menu.texy +++ b/latte/bg/@left-menu.texy @@ -1,4 +1,5 @@ - [Започване на работа |Guide] +- [Защо да използвате шаблони? |why-use] - Концепции - [Безопасността на първо място |Safety First] - [Наследяване на шаблона |Template Inheritance] diff --git a/latte/bg/why-use.texy b/latte/bg/why-use.texy new file mode 100644 index 0000000000..f2ef746501 --- /dev/null +++ b/latte/bg/why-use.texy @@ -0,0 +1,80 @@ +Защо да използвате шаблони? +*************************** + + +Защо трябва да използвам система за шаблониране в PHP? .[#toc-why-should-i-use-a-templating-system-in-php] +---------------------------------------------------------------------------------------------------------- + +Защо да се използва система за шаблони в PHP, след като самият PHP е език за шаблониране? + +Нека първо да обобщим накратко историята на този език, която е изпълнена с интересни обрати. Един от първите езици за програмиране, използвани за генериране на HTML страници, е езикът C. Скоро обаче стана ясно, че използването му за тази цел е непрактично. Така Расмус Лердорф създава PHP, който улеснява генерирането на динамичен HTML с помощта на езика C на гърба. Първоначално PHP е замислен като език за шаблониране, но с течение на времето придобива допълнителни функции и се превръща в пълноценен език за програмиране. + +Въпреки това той все още функционира като език за шаблониране. PHP файл може да съдържа HTML страница, в която променливите се извеждат с помощта на ``, и т.н. + +В началото на историята на PHP е създадена системата за шаблони Smarty, чиято цел е строго да отдели външния вид (HTML/CSS) от логиката на приложението. Тя умишлено предоставяше по-ограничен език от самия PHP, така че например разработчикът да не може да направи заявка към база данни от шаблон и т.н. От друга страна, той представляваше допълнителна зависимост в проектите, увеличаваше тяхната сложност и изискваше от програмистите да научат нов език Smarty. Тези предимства бяха спорни и обикновеният PHP продължи да се използва за шаблони. + +С течение на времето системите за шаблони започнаха да стават полезни. Те въведоха концепции като [наследяване |template-inheritance], [режим на пясъчна кутия |sandbox] и редица други функции, които значително опростиха създаването на шаблони в сравнение с чистия PHP. На преден план излезе темата за сигурността, съществуването на [уязвимости като XSS |safety-first] и необходимостта от [ескейпване |#What is escaping]. Системите за шаблони въведоха автоматичното извеждане, за да се елиминира рискът програмистът да го забрави и да създаде сериозна дупка в сигурността (скоро ще видим, че това има определени подводни камъни). + +Днес ползите от шаблонните системи далеч надхвърлят разходите, свързани с внедряването им. Следователно има смисъл да ги използвате. + + +Защо Latte е по-добър от Twig или Blade? .[#toc-why-is-latte-better-than-twig-or-blade] +--------------------------------------------------------------------------------------- + +Причините са няколко - някои от тях са приятни, а други са изключително полезни. Latte е комбинация от приятно и полезно. + +*Първо, приятните:* Latte има същия [синтаксис като PHP |syntax#Latte Understands PHP]. Единствената разлика е в записването на таговете, като се предпочитат по-кратките `{` и `}` вместо ``. Това означава, че не е необходимо да учите нов език. Разходите за обучение са минимални. Най-важното е, че по време на разработката не се налага постоянно да "превключвате" между езика PHP и езика на шаблоните, тъй като и двата са еднакви. Това е така за разлика от шаблоните Twig, които използват езика Python, което принуждава програмиста да превключва между два различни езика. + +*Сега за изключително полезната причина:* Всички системи за шаблони, като Twig, Blade или Smarty, са се развили така, че да включват защита срещу XSS под формата на автоматично [ескапиране |#What is escaping]. По-точно, автоматично извикване на функцията `htmlspecialchars()`. Създателите на Latte обаче осъзнаха, че това съвсем не е правилното решение. Това е така, защото различните части на документа изискват различни методи за ескапиране. Наивното автоматично ескапиране е опасна функция, защото създава фалшиво чувство за сигурност. + +За да може автоматичното ескапиране да бъде функционално и надеждно, то трябва да разпознава къде в документа се извеждат данните (наричаме ги контексти) и съответно да избира функцията за ескапиране. Следователно то трябва да е [чувствително към контекста |safety-first#Context-Aware Escaping]. Именно това може да направи Latte. Той разбира HTML. Той не възприема шаблона само като низ от символи, а разбира какво представляват таговете, атрибутите и т.н. Следователно той ескапира по различен начин в HTML текст, в рамките на HTML тагове, в JavaScript и т.н. + +Latte е първата и единствена система за шаблони на PHP с контекстно чувствително ескапиране. Тя представлява единствената наистина сигурна система за шаблони. + +*И още една приятна причина:* Тъй като Latte разбира HTML, тя предлага други много приятни функции. Например, [n:attributes |syntax#n:attributes]. Или възможност за [проверка на връзки |safety-first#Link checking]. И много други. + + +Какво е ескейпинг? .[#toc-what-is-escaping] +------------------------------------------- + +Ескапирането е процес, който включва заместване на символи със специално значение със съответните последователности при вмъкване на един низ в друг, за да се предотвратят нежелани ефекти или грешки. Например при вмъкване на низ в HTML текст, в който символът `<` има специално значение, тъй като указва началото на таг, го заменяме със съответната последователност, която е HTML ентитетът `<`. Това позволява на браузъра да показва правилно символа `<`. + +Прост пример за директно ескапиране при писане на PHP код е вмъкването на кавички в низ чрез поставяне на обратна наклонена черта пред тях. + +Разглеждаме ескапирането по-подробно в главата [Как да се защитим от XSS |safety-first#How to Defend Against XSS?]. + + +Може ли да се изпълни заявка за база данни от шаблон Latte? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +-------------------------------------------------------------------------------------------------------------------------- + +В шаблоните можете да работите с обекти, които програмистът им предава. Ако програмистът иска, може да подаде обект от база данни на шаблона и да изпълни заявка. Ако възнамеряват да го направят, няма причина да им се пречи. + +Различна ситуация възниква, ако искате да дадете на клиенти или външни програмисти възможност да редактират шаблони. В този случай определено не искате те да имат достъп до базата данни. Разбира се, няма да предадете обекта на базата данни на шаблона, но какво ще стане, ако той може да бъде достъпен чрез друг обект? Решението е [режимът на пясъчника |sandbox], който ви позволява да определите кои методи могат да се извикват в шаблоните. Благодарение на това не е необходимо да се притеснявате за пробиви в сигурността. + + +Какви са основните разлики между системите за шаблониране като Latte, Twig и Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +Разликите между системите за шаблониране като Latte, Twig и Blade се състоят главно в техния синтаксис, сигурност и интеграция с фреймуърки: + +- Latte: използва синтаксиса на езика PHP, което я прави по-лесна за научаване и използване. Тя осигурява първокласна защита срещу XSS атаки. +- Twig: използва синтаксис, подобен на този на Python, който е доста различен от този на PHP. Той избягва без разграничаване на контекста. Добре интегриран е с рамката Symfony. +- Blade: използва комбинация от PHP и собствен синтаксис. Той не различава контекста. Тясно интегриран е с функциите и екосистемата на Laravel. + + +Заслужава ли си компаниите да използват система за шаблониране? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +------------------------------------------------------------------------------------------------------------------------------- + +Първо, разходите, свързани с обучението, използването и общите ползи, варират значително в зависимост от системата. Системата за шаблониране Latte, благодарение на използването на синтаксиса на PHP, значително опростява обучението за програмисти, които вече са запознати с този език. Обикновено са необходими няколко часа, за да може програмистът да се запознае в достатъчна степен с Latte, което намалява разходите за обучение и ускорява усвояването на технологията и, което е най-важно, ефективността при ежедневната употреба. + +Освен това Latte осигурява високо ниво на защита срещу XSS уязвимост благодарение на уникалната си технология за избягване на контекст. Тази защита е от решаващо значение за гарантиране на сигурността на уеб приложенията и за свеждане до минимум на риска от атаки, които могат да застрашат потребителите или данните на компанията. Сигурността на уеб приложенията е важна и за поддържането на добрата репутация на компанията. Проблемите със сигурността могат да доведат до загуба на доверие от страна на клиентите и да навредят на репутацията на компанията на пазара. + +Използването на Latte също така намалява общите разходи за разработка и поддръжка, като улеснява и двете. Следователно използването на система за шаблониране определено си заслужава. + + +Влияе ли Latte върху производителността на уеб приложенията? .[#toc-does-latte-affect-the-performance-of-web-applications] +-------------------------------------------------------------------------------------------------------------------------- + +Въпреки че шаблоните Latte се обработват бързо, този аспект няма особено значение. Причината е, че парсирането на файловете се извършва само веднъж по време на първото показване. След това те се компилират в PHP код, съхраняват се на диска и се изпълняват при всяка следваща заявка, без да се налага повторно компилиране. + +Това е начинът, по който се работи в производствена среда. По време на разработката шаблоните Latte се прекомпилират всеки път, когато съдържанието им се промени, така че разработчикът винаги вижда актуалната версия. diff --git a/latte/cs/@left-menu.texy b/latte/cs/@left-menu.texy index 9c119e9632..545d015f3d 100644 --- a/latte/cs/@left-menu.texy +++ b/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] diff --git a/latte/cs/why-use.texy b/latte/cs/why-use.texy new file mode 100644 index 0000000000..1ae700909a --- /dev/null +++ b/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í `` 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 `` 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 `<`. 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. diff --git a/latte/de/@left-menu.texy b/latte/de/@left-menu.texy index c2d380373e..b0f0fc6fa1 100644 --- a/latte/de/@left-menu.texy +++ b/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] diff --git a/latte/de/why-use.texy b/latte/de/why-use.texy new file mode 100644 index 0000000000..b52c5a8b85 --- /dev/null +++ b/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 `` 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 `` 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 `<`. 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. diff --git a/latte/el/@left-menu.texy b/latte/el/@left-menu.texy index a05bc96ad4..b0beae99e9 100644 --- a/latte/el/@left-menu.texy +++ b/latte/el/@left-menu.texy @@ -1,4 +1,5 @@ - [Ξεκινώντας |Guide] +- [Γιατί να χρησιμοποιήσετε πρότυπα; |why-use] - Έννοιες - [Πρώτα η ασφάλεια |Safety First] - [Κληρονομικότητα προτύπων |Template Inheritance] diff --git a/latte/el/why-use.texy b/latte/el/why-use.texy new file mode 100644 index 0000000000..1f0085843a --- /dev/null +++ b/latte/el/why-use.texy @@ -0,0 +1,80 @@ +Γιατί να χρησιμοποιήσετε πρότυπα; +********************************* + + +Γιατί πρέπει να χρησιμοποιήσω ένα σύστημα δημιουργίας προτύπων στην PHP; .[#toc-why-should-i-use-a-templating-system-in-php] +---------------------------------------------------------------------------------------------------------------------------- + +Γιατί να χρησιμοποιήσετε ένα σύστημα προτύπων στην PHP όταν η ίδια η PHP είναι μια γλώσσα δημιουργίας προτύπων; + +Ας ανακεφαλαιώσουμε πρώτα εν συντομία την ιστορία αυτής της γλώσσας, η οποία είναι γεμάτη από ενδιαφέρουσες ανατροπές. Μια από τις πρώτες γλώσσες προγραμματισμού που χρησιμοποιήθηκαν για τη δημιουργία σελίδων HTML ήταν η γλώσσα C. Ωστόσο, σύντομα έγινε φανερό ότι η χρήση της για το σκοπό αυτό ήταν μη πρακτική. Έτσι, ο Rasmus Lerdorf δημιούργησε την PHP, η οποία διευκόλυνε τη δημιουργία δυναμικής HTML με τη γλώσσα C στο backend. Η PHP σχεδιάστηκε αρχικά ως γλώσσα δημιουργίας προτύπων, αλλά με την πάροδο του χρόνου απέκτησε πρόσθετα χαρακτηριστικά και έγινε μια ολοκληρωμένη γλώσσα προγραμματισμού. + +Παρ' όλα αυτά, εξακολουθεί να λειτουργεί ως γλώσσα διαμόρφωσης προτύπων. Ένα αρχείο PHP μπορεί να περιέχει μια σελίδα HTML, στην οποία οι μεταβλητές εξάγονται χρησιμοποιώντας ``, κ.λπ. + +Στις αρχές της ιστορίας της PHP, δημιουργήθηκε το σύστημα προτύπων Smarty, με σκοπό τον αυστηρό διαχωρισμό της εμφάνισης (HTML/CSS) από τη λογική της εφαρμογής. Σκόπιμα παρείχε μια πιο περιορισμένη γλώσσα από την ίδια την PHP, έτσι ώστε, για παράδειγμα, ένας προγραμματιστής να μην μπορεί να κάνει ένα ερώτημα στη βάση δεδομένων από ένα πρότυπο, κλπ. Από την άλλη πλευρά, αντιπροσώπευε μια πρόσθετη εξάρτηση στα έργα, αύξανε την πολυπλοκότητά τους και απαιτούσε από τους προγραμματιστές να μάθουν μια νέα γλώσσα Smarty. Τα οφέλη αυτά ήταν αμφιλεγόμενα και η απλή PHP συνέχισε να χρησιμοποιείται για τα πρότυπα. + +Με την πάροδο του χρόνου, τα συστήματα προτύπων άρχισαν να γίνονται χρήσιμα. Εισήγαγαν έννοιες όπως η [κληρονομικότητα |template-inheritance], η [λειτουργία sandbox |sandbox] και μια σειρά από άλλα χαρακτηριστικά που απλοποιούσαν σημαντικά τη δημιουργία προτύπων σε σύγκριση με την καθαρή PHP. Το θέμα της ασφάλειας, η ύπαρξη [ευπαθειών όπως το XSS |safety-first] και η ανάγκη για [escaping |#What is escaping] ήρθαν στο προσκήνιο. Τα συστήματα προτύπων εισήγαγαν την αυτόματη διαφυγή για να εξαλείψουν τον κίνδυνο να την ξεχάσει ένας προγραμματιστής και να δημιουργήσει ένα σοβαρό κενό ασφαλείας (θα δούμε σύντομα ότι αυτό έχει ορισμένες παγίδες). + +Σήμερα, τα οφέλη των συστημάτων προτύπων υπερτερούν κατά πολύ του κόστους που συνδέεται με την ανάπτυξή τους. Ως εκ τούτου, έχει νόημα η χρήση τους. + + +Γιατί το Latte είναι καλύτερο από το Twig ή το Blade; .[#toc-why-is-latte-better-than-twig-or-blade] +---------------------------------------------------------------------------------------------------- + +Υπάρχουν διάφοροι λόγοι - ορισμένοι είναι ευχάριστοι και άλλοι είναι εξαιρετικά χρήσιμοι. Το Latte είναι ένας συνδυασμός ευχάριστου και χρήσιμου. + +*Πρώτα, το ευχάριστο:* Το Latte έχει την ίδια [σύνταξη με την PHP |syntax#Latte Understands PHP]. Η μόνη διαφορά είναι στη σημειογραφία των ετικετών, προτιμώντας τα συντομότερα `{` και `}` αντί των ``. Αυτό σημαίνει ότι δεν χρειάζεται να μάθετε μια νέα γλώσσα. Το κόστος εκπαίδευσης είναι ελάχιστο. Το σημαντικότερο, κατά τη διάρκεια της ανάπτυξης, δεν χρειάζεται να "αλλάζετε" συνεχώς μεταξύ της γλώσσας PHP και της γλώσσας προτύπων, αφού και οι δύο είναι ίδιες. Αυτό συμβαίνει σε αντίθεση με τα πρότυπα Twig, τα οποία χρησιμοποιούν τη γλώσσα Python, αναγκάζοντας τον προγραμματιστή να εναλλάσσεται μεταξύ δύο διαφορετικών γλωσσών. + +*Και τώρα για τον εξαιρετικά χρήσιμο λόγο:* Όλα τα συστήματα προτύπων, όπως το Twig, το Blade ή το Smarty, έχουν εξελιχθεί ώστε να περιλαμβάνουν προστασία κατά του XSS με τη μορφή αυτόματης [διαφυγής |#What is escaping]. Πιο συγκεκριμένα, την αυτόματη κλήση της συνάρτησης `htmlspecialchars()`. Ωστόσο, οι δημιουργοί του Latte συνειδητοποίησαν ότι αυτή δεν είναι καθόλου η σωστή λύση. Αυτό συμβαίνει επειδή διαφορετικά μέρη του εγγράφου απαιτούν διαφορετικές μεθόδους διαφυγής. Η αφελής αυτόματη διαφυγή είναι ένα επικίνδυνο χαρακτηριστικό, επειδή δημιουργεί μια ψευδή αίσθηση ασφάλειας. + +Για να είναι λειτουργική και αξιόπιστη η αυτόματη απομάκρυνση, πρέπει να αναγνωρίζει πού στο έγγραφο εξάγονται τα δεδομένα (τα ονομάζουμε πλαίσια) και να επιλέγει τη λειτουργία απομάκρυνσης αναλόγως. Επομένως, πρέπει να είναι [ευαίσθητη στα συμφραζόμενα |safety-first#Context-Aware Escaping]. Και αυτό είναι που μπορεί να κάνει η Latte. Κατανοεί την HTML. Δεν αντιλαμβάνεται το πρότυπο ως μια απλή συμβολοσειρά χαρακτήρων, αλλά καταλαβαίνει τι είναι οι ετικέτες, τα χαρακτηριστικά κ.λπ. Ως εκ τούτου, αποφεύγει με διαφορετικό τρόπο το κείμενο HTML, μέσα σε ετικέτες HTML, μέσα σε JavaScript κ.λπ. + +Το Latte είναι το πρώτο και μοναδικό σύστημα προτύπων PHP με διαφυγή με ευαισθησία περιβάλλοντος. Αποτελεί το μόνο πραγματικά ασφαλές σύστημα προτύπων. + +*Και ένας άλλος ευχάριστος λόγος:* Επειδή το Latte καταλαβαίνει την HTML, προσφέρει και άλλα πολύ ευχάριστα χαρακτηριστικά. Για παράδειγμα, το [n:attributes |syntax#n:attributes]. Ή τη δυνατότητα [ελέγχου των συνδέσμων |safety-first#Link checking]. Και πολλά άλλα. + + +Τι είναι η διαφυγή; .[#toc-what-is-escaping] +-------------------------------------------- + +Η διαφυγή είναι μια διαδικασία που περιλαμβάνει την αντικατάσταση χαρακτήρων με ειδικές σημασίες με αντίστοιχες ακολουθίες κατά την εισαγωγή μιας συμβολοσειράς σε μια άλλη για την αποφυγή ανεπιθύμητων αποτελεσμάτων ή σφαλμάτων. Για παράδειγμα, κατά την εισαγωγή μιας συμβολοσειράς σε κείμενο HTML, στην οποία ο χαρακτήρας `<` έχει ειδική σημασία επειδή υποδηλώνει την αρχή μιας ετικέτας, τον αντικαθιστούμε με την αντίστοιχη ακολουθία, η οποία είναι η οντότητα HTML `<`. Αυτό επιτρέπει στο πρόγραμμα περιήγησης να εμφανίζει σωστά το σύμβολο `<`. + +Ένα απλό παράδειγμα άμεσης διαφυγής κατά τη συγγραφή κώδικα PHP είναι η εισαγωγή ενός εισαγωγικού σήματος σε μια συμβολοσειρά τοποθετώντας μια backslash μπροστά του. + +Συζητάμε το escaping με περισσότερες λεπτομέρειες στο κεφάλαιο [Πώς να αμυνθείτε κατά του XSS |safety-first#How to Defend Against XSS?]. + + +Μπορεί να εκτελεστεί ένα ερώτημα βάσης δεδομένων από ένα πρότυπο Latte; .[#toc-can-a-database-query-be-executed-from-a-latte-template] +-------------------------------------------------------------------------------------------------------------------------------------- + +Στα πρότυπα, μπορείτε να εργάζεστε με αντικείμενα που τους περνάει ο προγραμματιστής. Αν ο προγραμματιστής το επιθυμεί, μπορεί να περάσει ένα αντικείμενο βάσης δεδομένων στο πρότυπο και να εκτελέσει ένα ερώτημα. Αν σκοπεύουν να το κάνουν, δεν υπάρχει λόγος να τους εμποδίσουμε. + +Μια διαφορετική κατάσταση προκύπτει αν θέλετε να δώσετε σε πελάτες ή εξωτερικούς προγραμματιστές τη δυνατότητα να επεξεργάζονται πρότυπα. Σε αυτή την περίπτωση, σίγουρα δεν θέλετε να έχουν πρόσβαση στη βάση δεδομένων. Φυσικά, δεν θα περάσετε το αντικείμενο της βάσης δεδομένων στο πρότυπο, αλλά τι γίνεται αν μπορεί να γίνει πρόσβαση σε αυτό μέσω ενός άλλου αντικειμένου; Η λύση είναι η [λειτουργία sandbox |sandbox], η οποία σας επιτρέπει να ορίσετε ποιες μέθοδοι μπορούν να κληθούν στα πρότυπα. Χάρη σε αυτό, δεν χρειάζεται να ανησυχείτε για παραβιάσεις της ασφάλειας. + + +Ποιες είναι οι κύριες διαφορές μεταξύ συστημάτων template όπως το Latte, το Twig και το Blade; .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Οι διαφορές μεταξύ συστημάτων διαμόρφωσης προτύπων όπως το Latte, το Twig και το Blade έγκεινται κυρίως στη σύνταξη, την ασφάλεια και την ενσωμάτωση με πλαίσια: + +- Latte: χρησιμοποιεί σύνταξη της γλώσσας PHP, καθιστώντας την ευκολότερη στην εκμάθηση και τη χρήση. Παρέχει κορυφαία προστασία από επιθέσεις XSS. +- Twig: χρησιμοποιεί σύνταξη που μοιάζει με Python, η οποία είναι αρκετά διαφορετική από την PHP. Διαφεύγει χωρίς διάκριση πλαισίου. Είναι καλά ενσωματωμένο με το πλαίσιο Symfony. +- Blade: χρησιμοποιεί ένα μείγμα σύνταξης PHP και προσαρμοσμένης σύνταξης. Διαφεύγει χωρίς διάκριση πλαισίου. Είναι στενά ενσωματωμένο με τα χαρακτηριστικά και το οικοσύστημα του Laravel. + + +Αξίζει τον κόπο για τις εταιρείες να χρησιμοποιούν ένα σύστημα templating; .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +------------------------------------------------------------------------------------------------------------------------------------------ + +Πρώτον, το κόστος που σχετίζεται με την εκπαίδευση, τη χρήση και τα συνολικά οφέλη ποικίλλει σημαντικά ανάλογα με το σύστημα. Το σύστημα δημιουργίας προτύπων Latte, χάρη στη χρήση του συντακτικού της PHP, απλοποιεί σημαντικά την εκμάθηση για τους προγραμματιστές που είναι ήδη εξοικειωμένοι με αυτή τη γλώσσα. Συνήθως χρειάζονται λίγες ώρες για να εξοικειωθεί επαρκώς ένας προγραμματιστής με το Latte, μειώνοντας το κόστος εκπαίδευσης και επιταχύνοντας την υιοθέτηση της τεχνολογίας και, κυρίως, την αποτελεσματικότητα στην καθημερινή χρήση. + +Επιπλέον, το Latte παρέχει υψηλό επίπεδο προστασίας από την ευπάθεια XSS χάρη στη μοναδική τεχνολογία διαφυγής με επίγνωση του περιβάλλοντος. Αυτή η προστασία είναι ζωτικής σημασίας για τη διασφάλιση της ασφάλειας των εφαρμογών ιστού και την ελαχιστοποίηση του κινδύνου επιθέσεων που θα μπορούσαν να θέσουν σε κίνδυνο τους χρήστες ή τα δεδομένα της εταιρείας. Η ασφάλεια εφαρμογών ιστού είναι επίσης σημαντική για τη διατήρηση της καλής φήμης μιας εταιρείας. Τα ζητήματα ασφάλειας μπορεί να οδηγήσουν σε απώλεια εμπιστοσύνης από τους πελάτες και να βλάψουν τη φήμη της εταιρείας στην αγορά. + +Η χρήση του Latte μειώνει επίσης το συνολικό κόστος ανάπτυξης και συντήρησης, καθώς διευκολύνει και τα δύο. Επομένως, η χρήση ενός συστήματος template αξίζει σίγουρα τον κόπο. + + +Επηρεάζει το Latte την απόδοση των εφαρμογών ιστού; .[#toc-does-latte-affect-the-performance-of-web-applications] +----------------------------------------------------------------------------------------------------------------- + +Παρόλο που τα πρότυπα Latte επεξεργάζονται γρήγορα, αυτή η πτυχή δεν έχει πραγματικά σημασία. Ο λόγος είναι ότι η ανάλυση των αρχείων γίνεται μόνο μία φορά κατά την πρώτη εμφάνιση. Στη συνέχεια μεταγλωττίζονται σε κώδικα PHP, αποθηκεύονται στο δίσκο και εκτελούνται σε κάθε επόμενη αίτηση χωρίς να απαιτείται εκ νέου μεταγλώττιση. + +Έτσι λειτουργεί σε ένα περιβάλλον παραγωγής. Κατά τη διάρκεια της ανάπτυξης, τα πρότυπα Latte μεταγλωττίζονται εκ νέου κάθε φορά που αλλάζει το περιεχόμενό τους, ώστε ο προγραμματιστής να βλέπει πάντα την τρέχουσα έκδοση. diff --git a/latte/en/@left-menu.texy b/latte/en/@left-menu.texy index 0b903a9480..3b1d3a0474 100644 --- a/latte/en/@left-menu.texy +++ b/latte/en/@left-menu.texy @@ -1,4 +1,5 @@ - [Getting Started |Guide] +- [Why Use Templates? |why-use] - Concepts - [Safety First] - [Template Inheritance] diff --git a/latte/en/why-use.texy b/latte/en/why-use.texy new file mode 100644 index 0000000000..4e1a6280da --- /dev/null +++ b/latte/en/why-use.texy @@ -0,0 +1,80 @@ +Why Use Templates? +****************** + + +Why should I use a templating system in PHP? +-------------------------------------------- + +Why use a template system in PHP when PHP itself is a templating language? + +Let's first briefly recap the history of this language, which is full of interesting twists and turns. One of the first programming languages used for generating HTML pages was the C language. However, it soon became apparent that using it for this purpose was impractical. Rasmus Lerdorf thus created PHP, which facilitated the generation of dynamic HTML with the C language on the backend. PHP was originally designed as a templating language, but over time it acquired additional features and became a fully-fledged programming language. + +Nevertheless, it still functions as a templating language. A PHP file can contain an HTML page, in which variables are output using ``, etc. + +Early in PHP's history, the Smarty template system was created, with the purpose of strictly separating the appearance (HTML/CSS) from the application logic. It deliberately provided a more limited language than PHP itself, so that, for example, a developer could not make a database query from a template, etc. On the other hand, it represented an additional dependency in projects, increased their complexity, and required programmers to learn a new Smarty language. Such benefits were controversial, and plain PHP continued to be used for templates. + +Over time, template systems began to become useful. They introduced concepts such as [inheritance|template-inheritance], [sandbox mode|sandbox], and a range of other features that significantly simplified template creation compared to pure PHP. The topic of security, the existence of [vulnerabilities like XSS|safety-first], and the need for [escaping|#What is escaping] came to the forefront. Template systems introduced auto-escaping to eliminate the risk of a programmer forgetting it and creating a serious security hole (we'll see shortly that this has certain pitfalls). + +Today, the benefits of template systems far outweigh the costs associated with their deployment. Therefore, it makes sense to use them. + + +Why is Latte better than Twig or Blade? +--------------------------------------- + +There are several reasons - some are pleasant and others are immensely useful. Latte is a combination of pleasant and useful. + +*First, the pleasant:* Latte has the same [syntax as PHP|syntax#Latte Understands PHP]. The only difference is in the notation of tags, preferring shorter `{` and `}` instead of ``. This means that you don't have to learn a new language. Training costs are minimal. Most importantly, during development, you don't have to constantly "switch" between the PHP language and the template language, since they are both the same. This is unlike Twig templates, which use the Python language, forcing the programmer to switch between two different languages. + +*Now for the immensely useful reason:* All template systems, like Twig, Blade, or Smarty, have evolved to include protection against XSS in the form of automatic [escaping|#What is escaping]. More precisely, the automatic calling of the `htmlspecialchars()` function. However, the creators of Latte realized that this is not the right solution at all. This is because different parts of the document require different escaping methods. Naive auto-escaping is a dangerous feature because it creates a false sense of security. + +For auto-escaping to be functional and reliable, it must recognize where in the document the data is being output (we call these contexts) and choose the escaping function accordingly. Therefore, it must be [context-sensitive|safety-first#Context-Aware Escaping]. And this is what Latte can do. It understands HTML. It doesn't perceive the template as just a string of characters but understands what tags, attributes, etc., are. Therefore, it escapes differently in HTML text, within HTML tags, inside JavaScript, etc. + +Latte is the first and only PHP template system with context-sensitive escaping. It represents the only truly secure template system. + +*And another pleasant reason:* Because Latte understands HTML, it offers other very pleasant features. For example, [n:attributes|syntax#n:attributes]. Or the ability to [check links|safety-first#Link checking]. And many more. + + +What is escaping? +----------------- + +Escaping is a process that involves replacing characters with special meanings with corresponding sequences when inserting one string into another to prevent unwanted effects or errors. For example, when inserting a string into HTML text, in which the character `<` has a special meaning because it indicates the beginning of a tag, we replace it with the corresponding sequence, which is the HTML entity `<`. This allows the browser to correctly display `<` symbol. + +A simple example of escaping directly when writing PHP code is inserting a quotation mark into a string by placing a backslash in front of it. + +We discuss escaping in more detail in the chapter [How to defend against XSS|safety-first#How to Defend Against XSS?]. + + +Can a database query be executed from a Latte template? +------------------------------------------------------- + +In templates, you can work with objects that the programmer passes to them. If the programmer wants to, they can pass a database object to the template and perform a query. If they intend to do so, there is no reason to prevent them. + +A different situation arises if you want to give clients or external coders the ability to edit templates. In this case, you definitely don't want them to have access to the database. Of course, you won't pass the database object to the template, but what if it can be accessed through another object? The solution is the [sandbox mode|sandbox], which allows you to define which methods can be called in templates. Thanks to this, you don't have to worry about security breaches. + + +What are the main differences between templating systems like Latte, Twig, and Blade? +------------------------------------------------------------------------------------- + +The differences between templating systems like Latte, Twig, and Blade mainly lie in their syntax, security, and integration with frameworks: + +- Latte: uses PHP language syntax, making it easier to learn and use. It provides top-notch protection against XSS attacks. +- Twig: uses Python-like syntax, which is quite different from PHP. It escapes without context distinction. It is well integrated with the Symfony framework. +- Blade: uses a mix of PHP and custom syntax. It escapes without context distinction. It is tightly integrated with Laravel features and ecosystem. + + +Is it worth it for companies to use a templating system? +-------------------------------------------------------- + +Firstly, the costs associated with training, usage, and overall benefits vary significantly depending on the system. The Latte templating system, thanks to its use of PHP syntax, greatly simplifies learning for programmers already familiar with this language. It usually takes a few hours for a programmer to become sufficiently acquainted with Latte, reducing training costs and accelerating the adoption of technology and, most importantly, efficiency in daily use. + +Additionally, Latte provides a high level of protection against XSS vulnerability thanks to its unique context-aware escaping technology. This protection is crucial for ensuring web application security and minimizing the risk of attacks that could endanger users or company data. Web application security is also important for maintaining a company's good reputation. Security issues can lead to loss of trust from customers and damage the company's reputation in the market. + +Using Latte also reduces overall development and maintenance costs by making both easier. Therefore, using a templating system is definitely worth it. + + +Does Latte affect the performance of web applications? +------------------------------------------------------ + +Although Latte templates are processed quickly, this aspect does not really matter. The reason is that parsing files occurs only once during the first display. They are then compiled into PHP code, stored on disk, and run on every subsequent request without requiring recompilation. + +This is how it works in a production environment. During development, Latte templates are recompiled every time their content changes, so the developer always sees the current version. diff --git a/latte/es/@left-menu.texy b/latte/es/@left-menu.texy index 6ab06af07a..9b1db0abb8 100644 --- a/latte/es/@left-menu.texy +++ b/latte/es/@left-menu.texy @@ -1,4 +1,5 @@ - [Primeros pasos |Guide] +- [¿Por qué utilizar plantillas? |why-use] - Conceptos - [La seguridad ante todo |Safety First] - [Herencia de plantillas |Template Inheritance] diff --git a/latte/es/why-use.texy b/latte/es/why-use.texy new file mode 100644 index 0000000000..a0e09223ec --- /dev/null +++ b/latte/es/why-use.texy @@ -0,0 +1,80 @@ +¿Por qué usar plantillas? +************************* + + +¿Por qué debería usar un sistema de plantillas en PHP? .[#toc-why-should-i-use-a-templating-system-in-php] +---------------------------------------------------------------------------------------------------------- + +¿Por qué usar un sistema de plantillas en PHP, cuando PHP en sí mismo es un lenguaje de plantillas? + +Primero, repasemos brevemente la historia de este lenguaje, que está llena de giros interesantes. Uno de los primeros lenguajes de programación utilizados para generar páginas HTML fue el lenguaje C. Sin embargo, pronto se demostró que su uso para este propósito era poco práctico. Por lo tanto, Rasmus Lerdorf creó PHP, que facilitó la generación de HTML dinámico con el lenguaje C en el backend. PHP fue diseñado originalmente como un lenguaje de plantillas, pero con el tiempo adquirió más funciones y se convirtió en un lenguaje de programación completo. + +A pesar de esto, PHP sigue siendo un lenguaje de plantillas. En un archivo PHP, se puede escribir una página HTML en la que las variables se imprimen utilizando ``, etc. + +Desde los primeros días de la historia de PHP, se creó el sistema de plantillas Smarty, cuyo propósito era separar estrictamente la apariencia (HTML/CSS) de la lógica de la aplicación. Por lo tanto, proporcionó un lenguaje más limitado que PHP para evitar que el desarrollador, por ejemplo, realice consultas a la base de datos desde la plantilla. Por otro lado, introdujo una dependencia adicional en los proyectos, aumentó su complejidad y los programadores tuvieron que aprender un nuevo lenguaje, Smarty. El beneficio fue discutible y PHP siguió siendo utilizado para las plantillas. + +Con el tiempo, los sistemas de plantillas comenzaron a ser útiles. Introdujeron conceptos como [herencia de plantillas|template-inheritance], [modo sandbox|sandbox] y una serie de otras características que simplificaron significativamente la creación de plantillas en comparación con PHP puro. La seguridad y la existencia de [vulnerabilidades como XSS|safety-first] y la necesidad de [escapar|#What is escaping] se convirtieron en temas relevantes. Los sistemas de plantillas introdujeron el autoescapado para eliminar el riesgo de que el programador lo olvide y se cree una vulnerabilidad de seguridad grave (en breve veremos que esto tiene ciertos problemas). + +Hoy en día, los beneficios de los sistemas de plantillas superan con creces los costos asociados con su implementación. Por lo tanto, tiene sentido utilizarlos. + + +¿Por qué es mejor Latte que, por ejemplo, Twig o Blade? .[#toc-why-is-latte-better-than-twig-or-blade] +------------------------------------------------------------------------------------------------------ + +Hay varias razones, algunas son agradables y otras esencialmente útiles. Latte es una combinación de lo agradable y lo útil. + +*Primero, lo agradable:* Latte tiene la misma [sintaxis que PHP|syntax#Latte Understands PHP]. Sólo difiere en la notación de las etiquetas, en lugar de ``, prefiere `{` y `}` más cortos. Esto significa que no tienes que aprender un nuevo lenguaje. Los costos de capacitación son mínimos. Y lo más importante, durante el desarrollo no tienes que cambiar constantemente entre el lenguaje PHP y el lenguaje de plantillas, ya que ambos son iguales. A diferencia de las plantillas Twig, que utilizan el lenguaje Python, y el programador debe alternar entre dos lenguajes diferentes. + +*Y ahora una razón extremadamente útil:* Todos los sistemas de plantillas, como Twig, Blade o Smarty, han introducido protección contra XSS en forma de [escapado automático|#What is escaping]. Más precisamente, llamando automáticamente a la función `htmlspecialchars()`. Sin embargo, los creadores de Latte se dieron cuenta de que esto no es la solución correcta. Porque en diferentes partes del documento, se escapa de diferentes maneras. El escapado automático ingenuo es una función peligrosa porque crea una falsa sensación de seguridad. + +Para que el escapado automático sea funcional y confiable, debe reconocer en qué parte del documento se están imprimiendo los datos (llamamos a esto contextos) y elegir la función de escapado según eso. Por lo tanto, debe ser [sensible al contexto|safety-first#Context-Aware Escaping]. Y esto es precisamente lo que Latte puede hacer. Entiende HTML. No percibe la plantilla solo como una cadena de caracteres, sino que comprende qué son las etiquetas, los atributos, etc. Por lo tanto, escapa de manera diferente en el texto HTML, dentro de las etiquetas HTML, dentro de JavaScript, etc. + +Latte es el primer y único sistema de plantillas en PHP que tiene escapado sensible al contexto. Por lo tanto, representa el único sistema de plantillas verdaderamente seguro. + +*Y otra razón agradable:* Gracias a que Latte entiende HTML, ofrece otras características muy agradables. Por ejemplo, [n:atributos|syntax#n:attributes]. O la capacidad de [verificar enlaces|safety-first#Link checking]. Y muchas más. + + +¿Qué es el escape? .[#toc-what-is-escaping] +------------------------------------------- + +Escapar es un proceso que consiste en sustituir caracteres con significados especiales por las secuencias correspondientes al insertar una cadena en otra para evitar efectos no deseados o errores. Por ejemplo, al insertar una cadena en un texto HTML, en el que el carácter `<` tiene un significado especial porque indica el comienzo de una etiqueta, lo sustituimos por la secuencia correspondiente, que es la entidad HTML `<`. Esto permite al navegador mostrar correctamente el símbolo `<`. + +Un ejemplo sencillo de escape directo al escribir código PHP es insertar una comilla en una cadena colocando una barra invertida delante de ella. + +Discutimos el escape con más detalle en el capítulo [Cómo defenderse contra XSS |safety-first#How to Defend Against XSS?]. + + +¿Puede ejecutarse una consulta a la base de datos desde una plantilla Latte? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +------------------------------------------------------------------------------------------------------------------------------------------- + +En las plantillas se puede trabajar con objetos que el programador les pasa. Si el programador quiere, puede pasar un objeto de base de datos a la plantilla y realizar una consulta. Si tienen intención de hacerlo, no hay ninguna razón para impedírselo. + +Una situación diferente surge si desea dar a los clientes o codificadores externos la capacidad de editar plantillas. En este caso, definitivamente no querrá que tengan acceso a la base de datos. Por supuesto, usted no pasará el objeto de base de datos a la plantilla, pero ¿qué pasa si se puede acceder a través de otro objeto? La solución es el [modo sandbox |sandbox], que te permite definir qué métodos pueden ser llamados en las plantillas. Gracias a esto, no tienes que preocuparte por las brechas de seguridad. + + +¿Cuáles son las principales diferencias entre sistemas de plantillas como Latte, Twig y Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Las diferencias entre sistemas de plantillas como Latte, Twig y Blade radican principalmente en su sintaxis, seguridad e integración con frameworks: + +- Latte: utiliza la sintaxis del lenguaje PHP, lo que facilita su aprendizaje y uso. Ofrece una protección de primer nivel contra ataques XSS. +- Twig: utiliza una sintaxis similar a la de Python, que es bastante diferente de la de PHP. Escapa sin distinción de contexto. Está bien integrado con el framework Symfony. +- Blade: utiliza una mezcla de PHP y sintaxis personalizada. Escapa sin distinción de contexto. Está estrechamente integrado con las características y el ecosistema de Laravel. + + +¿Merece la pena para las empresas utilizar un sistema de plantillas? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +------------------------------------------------------------------------------------------------------------------------------------ + +En primer lugar, los costes asociados a la formación, el uso y los beneficios generales varían significativamente en función del sistema. El sistema de plantillas Latte, gracias a su uso de la sintaxis PHP, simplifica enormemente el aprendizaje para los programadores ya familiarizados con este lenguaje. Por lo general, un programador tarda unas horas en familiarizarse suficientemente con Latte, lo que reduce los costes de formación y acelera la adopción de la tecnología y, lo que es más importante, la eficacia en el uso diario. + +Además, Latte proporciona un alto nivel de protección contra la vulnerabilidad XSS gracias a su exclusiva tecnología de escape sensible al contexto. Esta protección es crucial para garantizar la seguridad de las aplicaciones web y minimizar el riesgo de ataques que puedan poner en peligro a los usuarios o los datos de la empresa. La seguridad de las aplicaciones web también es importante para mantener la buena reputación de una empresa. Los problemas de seguridad pueden provocar la pérdida de confianza de los clientes y dañar la reputación de la empresa en el mercado. + +El uso de Latte también reduce los costes generales de desarrollo y mantenimiento, ya que facilita ambos. Por lo tanto, utilizar un sistema de plantillas merece definitivamente la pena. + + +¿Afecta Latte al rendimiento de las aplicaciones web? .[#toc-does-latte-affect-the-performance-of-web-applications] +------------------------------------------------------------------------------------------------------------------- + +Aunque las plantillas Latte se procesan rápidamente, este aspecto no importa realmente. La razón es que el análisis sintáctico de los archivos sólo se produce una vez durante la primera visualización. Después se compilan en código PHP, se almacenan en disco y se ejecutan en cada petición posterior sin necesidad de recompilación. + +Así es como funciona en un entorno de producción. Durante el desarrollo, las plantillas Latte se recompilan cada vez que cambia su contenido, por lo que el desarrollador siempre ve la versión actual. diff --git a/latte/fr/@left-menu.texy b/latte/fr/@left-menu.texy index 10e3f0b396..16e8f0c1d9 100644 --- a/latte/fr/@left-menu.texy +++ b/latte/fr/@left-menu.texy @@ -1,4 +1,5 @@ - [Mise en route |Guide] +- [Pourquoi utiliser des modèles ? |why-use] - Concepts - [Sécurité d'abord |Safety First] - [Héritage des modèles |Template Inheritance] diff --git a/latte/fr/why-use.texy b/latte/fr/why-use.texy new file mode 100644 index 0000000000..e7da37380b --- /dev/null +++ b/latte/fr/why-use.texy @@ -0,0 +1,80 @@ +Pourquoi utiliser des modèles ? +******************************* + + +Pourquoi utiliser un système de templates en PHP ? .[#toc-why-should-i-use-a-templating-system-in-php] +------------------------------------------------------------------------------------------------------ + +Pourquoi utiliser un système de modèles en PHP alors que PHP lui-même est un langage de création de modèles ? + +Rappelons d'abord brièvement l'histoire de ce langage, qui est pleine de rebondissements intéressants. L'un des premiers langages de programmation utilisés pour générer des pages HTML était le langage C. Cependant, il est vite apparu que son utilisation à cette fin n'était pas pratique. Rasmus Lerdorf a donc créé PHP, qui permettait de générer des pages HTML dynamiques avec le langage C en arrière-plan. À l'origine, PHP était conçu comme un langage de création de modèles, mais au fil du temps, il a acquis des fonctionnalités supplémentaires et est devenu un langage de programmation à part entière. + +Néanmoins, il fonctionne toujours comme un langage de création de modèles. Un fichier PHP peut contenir une page HTML, dans laquelle les variables sont affichées à l'aide de ``etc. + +Au début de l'histoire de PHP, le système de modèles Smarty a été créé dans le but de séparer strictement l'apparence (HTML/CSS) de la logique de l'application. Il a délibérément fourni un langage plus limité que PHP lui-même, de sorte que, par exemple, un développeur ne pouvait pas faire une requête de base de données à partir d'un modèle, etc. D'autre part, il représentait une dépendance supplémentaire dans les projets, augmentait leur complexité et obligeait les programmeurs à apprendre un nouveau langage Smarty. Ces avantages étaient controversés, et le PHP simple a continué à être utilisé pour les modèles. + +Au fil du temps, les systèmes de modèles ont commencé à devenir utiles. Ils ont introduit des concepts tels que l'[héritage |template-inheritance], le [mode "bac à sable" |sandbox] et une série d'autres fonctionnalités qui ont considérablement simplifié la création de modèles par rapport au PHP pur. Le sujet de la sécurité, l'existence de [vulnérabilités telles que XSS |safety-first], et le besoin d'[échappement |#What is escaping] sont apparus sur le devant de la scène. Les systèmes de modèles ont introduit l'échappement automatique pour éliminer le risque qu'un programmeur l'oublie et crée une grave faille de sécurité (nous verrons bientôt que cela comporte certains pièges). + +Aujourd'hui, les avantages des systèmes de modèles dépassent largement les coûts associés à leur déploiement. Il est donc logique de les utiliser. + + +Pourquoi Latte est-il meilleur que Twig ou Blade ? .[#toc-why-is-latte-better-than-twig-or-blade] +------------------------------------------------------------------------------------------------- + +Il y a plusieurs raisons - certaines sont agréables et d'autres sont immensément utiles. Latte est une combinaison d'agréable et d'utile. + +*Tout d'abord, l'agréable:* Latte a la même [syntaxe que PHP |syntax#Latte Understands PHP]. La seule différence réside dans la notation des balises, qui préfère les balises courtes `{` et `}` à ``. Cela signifie que vous ne devez pas apprendre un nouveau langage. Les coûts de formation sont minimes. Plus important encore, pendant le développement, vous n'avez pas à "basculer" constamment entre le langage PHP et le langage des modèles, puisqu'il s'agit du même langage. Contrairement aux modèles Twig, qui utilisent le langage Python, le programmeur est obligé de passer d'un langage à l'autre. + +*Tous les systèmes de templates, comme Twig, Blade ou Smarty, ont évolué pour inclure une protection contre les XSS sous la forme d'un [échappement |#What is escaping] automatique. Plus précisément, l'appel automatique de la fonction `htmlspecialchars()`. Cependant, les créateurs de Latte ont réalisé que ce n'était pas du tout la bonne solution. En effet, les différentes parties du document requièrent des méthodes d'échappement différentes. L'échappement automatique naïf est une fonction dangereuse car elle crée un faux sentiment de sécurité. + +Pour que l'échappement automatique soit fonctionnel et fiable, il doit reconnaître à quel endroit du document les données sont émises (ce que nous appelons les contextes) et choisir la fonction d'échappement en conséquence. Il doit donc être [sensible au contexte |safety-first#Context-Aware Escaping]. Et c'est ce que Latte peut faire. Il comprend le langage HTML. Il ne perçoit pas le modèle comme une simple chaîne de caractères, mais comprend ce que sont les balises, les attributs, etc. Par conséquent, il échappe différemment dans le texte HTML, à l'intérieur des balises HTML, à l'intérieur de JavaScript, etc. + +Latte est le premier et le seul système de gabarits PHP avec échappement contextuel. Il représente le seul système de modèles réellement sécurisé. + +*Et une autre raison agréable:* Parce que Latte comprend le HTML, il offre d'autres fonctionnalités très agréables. Par exemple, [n:attributs |syntax#n:attributes]. Ou la possibilité de [vérifier les liens |safety-first#Link checking]. Et bien d'autres encore. + + +Qu'est-ce que l'échappement ? .[#toc-what-is-escaping] +------------------------------------------------------ + +L'échappement est un processus qui consiste à remplacer les caractères ayant une signification particulière par des séquences correspondantes lors de l'insertion d'une chaîne dans une autre afin d'éviter des effets indésirables ou des erreurs. Par exemple, lors de l'insertion d'une chaîne dans un texte HTML, dans laquelle le caractère `<` a une signification particulière car il indique le début d'une balise, nous le remplaçons par la séquence correspondante, qui est l'entité HTML `<`. Cela permet au navigateur d'afficher correctement le symbole `<`. + +Un exemple simple d'échappement direct lors de l'écriture du code PHP est l'insertion d'un guillemet dans une chaîne de caractères en plaçant une barre oblique inverse devant le guillemet. + +Nous discutons de l'échappement plus en détail dans le chapitre [Comment se défendre contre les XSS |safety-first#How to Defend Against XSS?]. + + +Une requête de base de données peut-elle être exécutée à partir d'un modèle Latte ? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +-------------------------------------------------------------------------------------------------------------------------------------------------- + +Dans les modèles, vous pouvez travailler avec les objets que le programmeur leur transmet. Si le programmeur le souhaite, il peut transmettre un objet de base de données au modèle et exécuter une requête. S'il a l'intention de le faire, il n'y a aucune raison de l'en empêcher. + +La situation est différente si vous souhaitez donner à des clients ou à des codeurs externes la possibilité de modifier les modèles. Dans ce cas, vous ne voulez absolument pas qu'ils aient accès à la base de données. Bien entendu, vous ne transmettrez pas l'objet base de données au modèle, mais qu'en est-il si un autre objet permet d'y accéder ? La solution est le [mode "bac à sable |sandbox]", qui vous permet de définir quelles méthodes peuvent être appelées dans les modèles. Grâce à cela, vous n'avez pas à vous soucier des failles de sécurité. + + +Quelles sont les principales différences entre les systèmes de templates tels que Latte, Twig et Blade ? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Les différences entre les systèmes de templating tels que Latte, Twig et Blade résident principalement dans leur syntaxe, leur sécurité et leur intégration avec les frameworks : + +- Latte : utilise la syntaxe du langage PHP, ce qui facilite son apprentissage et son utilisation. Il offre une protection de premier ordre contre les attaques XSS. +- Twig : utilise une syntaxe semblable à celle de Python, qui est assez différente de celle de PHP. Il s'échappe sans distinction de contexte. Il est bien intégré au framework Symfony. +- Blade : utilise un mélange de PHP et de syntaxe personnalisée. Il s'échappe sans distinction de contexte. Il est étroitement intégré aux fonctionnalités et à l'écosystème de Laravel. + + +Cela vaut-il la peine pour les entreprises d'utiliser un système de templating ? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +------------------------------------------------------------------------------------------------------------------------------------------------ + +Tout d'abord, les coûts associés à la formation, à l'utilisation et aux avantages globaux varient considérablement en fonction du système. Le système de templates Latte, grâce à son utilisation de la syntaxe PHP, simplifie grandement l'apprentissage des programmeurs déjà familiarisés avec ce langage. Il suffit généralement de quelques heures pour qu'un programmeur se familiarise suffisamment avec Latte, ce qui réduit les coûts de formation et accélère l'adoption de la technologie et, surtout, l'efficacité dans l'utilisation quotidienne. + +En outre, Latte offre un haut niveau de protection contre les vulnérabilités XSS grâce à sa technologie unique d'échappement contextuel. Cette protection est cruciale pour assurer la sécurité des applications web et minimiser le risque d'attaques qui pourraient mettre en danger les utilisateurs ou les données de l'entreprise. La sécurité des applications web est également importante pour maintenir la bonne réputation d'une entreprise. Les problèmes de sécurité peuvent entraîner une perte de confiance de la part des clients et nuire à la réputation de l'entreprise sur le marché. + +L'utilisation de Latte permet également de réduire les coûts globaux de développement et de maintenance en les facilitant. Par conséquent, l'utilisation d'un système de templates en vaut vraiment la peine. + + +Latte affecte-t-il les performances des applications web ? .[#toc-does-latte-affect-the-performance-of-web-applications] +------------------------------------------------------------------------------------------------------------------------ + +Bien que les modèles Latte soient traités rapidement, cet aspect n'a pas vraiment d'importance. En effet, l'analyse des fichiers n'a lieu qu'une seule fois lors du premier affichage. Ils sont ensuite compilés en code PHP, stockés sur le disque et exécutés à chaque demande ultérieure sans nécessiter de recompilation. + +C'est ainsi que cela fonctionne dans un environnement de production. Pendant le développement, les modèles Latte sont recompilés chaque fois que leur contenu est modifié, de sorte que le développeur voit toujours la version actuelle. diff --git a/latte/hu/@left-menu.texy b/latte/hu/@left-menu.texy index bb5bc21b48..7b45ea1690 100644 --- a/latte/hu/@left-menu.texy +++ b/latte/hu/@left-menu.texy @@ -1,4 +1,5 @@ - [Kezdő lépések |Guide] +- [Miért használjon sablonokat? |why-use] - Fogalmak - [Első a biztonság |Safety First] - [Sablon öröklődés |Template Inheritance] diff --git a/latte/hu/why-use.texy b/latte/hu/why-use.texy new file mode 100644 index 0000000000..871ea8325f --- /dev/null +++ b/latte/hu/why-use.texy @@ -0,0 +1,80 @@ +Miért használjon sablonokat? +**************************** + + +Miért érdemes sablonrendszert használni a PHP-ban? .[#toc-why-should-i-use-a-templating-system-in-php] +------------------------------------------------------------------------------------------------------ + +Miért használjunk sablonrendszert a PHP-ban, amikor a PHP maga is sablonnyelv? + +Először is, foglaljuk össze röviden ennek a nyelvnek a történetét, amely tele van érdekes fordulatokkal. Az egyik első HTML-oldalak generálására használt programozási nyelv a C nyelv volt. Hamarosan kiderült azonban, hogy erre a célra használni nem praktikus. Rasmus Lerdorf ezért megalkotta a PHP-t, amely megkönnyítette a dinamikus HTML generálását a C nyelvvel a háttérben. A PHP-t eredetileg templating nyelvnek tervezték, de idővel további funkciókkal bővült, és teljes értékű programozási nyelvvé vált. + +Ennek ellenére továbbra is templating nyelvként működik. Egy PHP-fájl tartalmazhat egy HTML-oldalt, amelyben a változókat a következő módon adjuk ki ``, stb. + +A PHP történetének korai szakaszában jött létre a Smarty sablonrendszer, amelynek célja a megjelenés (HTML/CSS) és az alkalmazási logika szigorú szétválasztása volt. Szándékosan korlátozottabb nyelvet biztosított, mint maga a PHP, így például egy fejlesztő nem tudott egy sablonból adatbázis-lekérdezést készíteni stb. Másrészt további függőséget jelentett a projektekben, növelte azok összetettségét, és a programozóknak egy új Smarty nyelvet kellett megtanulniuk. Ezek az előnyök ellentmondásosak voltak, és továbbra is a sima PHP-t használták a sablonokhoz. + +Idővel a sablonrendszerek kezdtek hasznosnak bizonyulni. Olyan fogalmakat vezettek be, mint az [öröklés |template-inheritance], a [sandbox mód |sandbox] és egy sor más funkció, amelyek jelentősen leegyszerűsítették a sablonkészítést a tiszta PHP-hoz képest. A biztonság témája, az [olyan sebezhetőségek |safety-first] létezése [, mint az XSS |safety-first], és a [menekülés |#What is escaping] szükségessége előtérbe került. A sablonrendszerek bevezették az automatikus mentést, hogy kiküszöböljék annak kockázatát, hogy a programozó elfelejtse és komoly biztonsági rést hozzon létre (rövidesen látni fogjuk, hogy ennek vannak bizonyos buktatói). + +Ma a sablonrendszerek előnyei messze meghaladják a bevezetésükkel járó költségeket. Ezért van értelme használni őket. + + +Miért jobb a Latte, mint a Twig vagy a Blade? .[#toc-why-is-latte-better-than-twig-or-blade] +-------------------------------------------------------------------------------------------- + +Számos oka van - néhány kellemes, mások pedig mérhetetlenül hasznosak. A Latte a kellemes és a hasznos kombinációja. + +*Először is, a kellemes:* A Latte [szintaxisa |syntax#Latte Understands PHP] megegyezik [a PHP-ével |syntax#Latte Understands PHP]. Az egyetlen különbség a címkék jelölésében van, a `` helyett a rövidebb `{` és `}` jelöléseket részesíti előnyben. Ez azt jelenti, hogy nem kell új nyelvet tanulnia. A képzési költségek minimálisak. A legfontosabb, hogy a fejlesztés során nem kell folyamatosan "váltogatni" a PHP és a sablonnyelv között, mivel mindkettő ugyanaz. Ez ellentétben a Twig sablonokkal, amelyek a Python nyelvet használják, így a programozó kénytelen két különböző nyelv között váltani. + +*Most a mérhetetlenül hasznos ok:* Minden sablonrendszer, mint például a Twig, a Blade vagy a Smarty, úgy fejlődött, hogy tartalmazzon XSS elleni védelmet az automatikus [escaping |#What is escaping] formájában. Pontosabban a `htmlspecialchars()` függvény automatikus meghívása. A Latte készítői azonban rájöttek, hogy ez egyáltalán nem jó megoldás. A dokumentum különböző részei ugyanis különböző escaping módszereket igényelnek. A naiv automatikus szcenírozás veszélyes funkció, mert hamis biztonságérzetet kelt. + +Ahhoz, hogy az automatikus menekítés működőképes és megbízható legyen, fel kell ismernie, hogy a dokumentumban hol történik az adatok kimenete (ezeket nevezzük kontextusoknak), és ennek megfelelően kell kiválasztania a menekítési funkciót. Ezért [kontextusfüggőnek |safety-first#Context-Aware Escaping] kell lennie. És ez az, amire a Latte képes. Megérti a HTML-t. A sablont nem csak egy karaktersorozatként érzékeli, hanem megérti, hogy mik a címkék, attribútumok stb. Ezért másképp lép el a HTML-szövegben, a HTML-címkéken belül, a JavaScriptben stb. + +A Latte az első és egyetlen PHP sablonrendszer, amely kontextusfüggő escapinggel rendelkezik. Ez az egyetlen igazán biztonságos sablonrendszer. + +*És egy másik kellemes ok:* Mivel a Latte érti a HTML-t, más nagyon kellemes funkciókat is kínál. Például az [n:attribútumok |syntax#n:attributes]. Vagy a [linkek ellenőrzésének |safety-first#Link checking] lehetőségét. És még sok minden mást. + + +Mi az a menekülés? .[#toc-what-is-escaping] +------------------------------------------- + +Az escaping egy olyan folyamat, amely során a különleges jelentésű karaktereket megfelelő szekvenciákkal helyettesítjük, amikor az egyik karakterláncot egy másikba illesztjük, hogy megakadályozzuk a nem kívánt hatásokat vagy hibákat. Például, amikor egy olyan karakterláncot illesztünk be HTML-szövegbe, amelyben a `<` karakter különleges jelentéssel bír, mivel egy tag elejét jelzi, a megfelelő szekvenciával helyettesítjük, ami a `<` HTML-egység. Ez lehetővé teszi a böngésző számára a `<` szimbólum helyes megjelenítését. + +Egy egyszerű példa a PHP-kód írásakor a közvetlen menekülésre, amikor idézőjelet illesztünk be egy karakterláncba úgy, hogy egy backslash-t helyezünk elé. + +Az escapinget részletesebben a [Hogyan védekezzünk az XSS ellen |safety-first#How to Defend Against XSS?] című fejezetben tárgyaljuk. + + +Végrehajtható-e adatbázis-lekérdezés egy Latte sablonból? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +------------------------------------------------------------------------------------------------------------------------ + +A sablonokban olyan objektumokkal lehet dolgozni, amelyeket a programozó átad nekik. Ha a programozó úgy akarja, átadhat egy adatbázis-objektumot a sablonhoz, és lekérdezést végezhet. Ha ezt szándékukban áll megtenni, nincs okunk megakadályozni őket ebben. + +Más a helyzet, ha az ügyfeleknek vagy külső programozóknak akarja megadni a sablonok szerkesztésének lehetőségét. Ebben az esetben semmiképpen sem szeretné, ha hozzáférnének az adatbázishoz. Természetesen nem fogod átadni az adatbázis-objektumot a sablonhoz, de mi van akkor, ha az egy másik objektumon keresztül érhető el? A megoldás a [sandbox mód |sandbox], amely lehetővé teszi annak meghatározását, hogy a sablonokban milyen metódusok hívhatók meg. Ennek köszönhetően nem kell aggódnia a biztonsági rések miatt. + + +Mik a fő különbségek az olyan templating rendszerek között, mint a Latte, a Twig és a Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Az olyan templating rendszerek, mint a Latte, a Twig és a Blade közötti különbségek elsősorban a szintaxisukban, a biztonságukban és a keretrendszerekkel való integrációjukban rejlenek: + +- Latte: PHP nyelvi szintaxist használ, így könnyebben megtanulható és használható. Kiváló védelmet nyújt az XSS-támadások ellen. +- Twig: Python-szerű szintaxist használ, ami teljesen eltér a PHP nyelvtől. Kontextus megkülönböztetés nélkül menekül. Jól integrálható a Symfony keretrendszerrel. +- Blade: a PHP és az egyéni szintaxis keverékét használja. A kontextus megkülönböztetése nélkül menekül. Szorosan integrálódik a Laravel funkcióiba és ökoszisztémájába. + + +Megéri a vállalatoknak templating rendszert használni? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +---------------------------------------------------------------------------------------------------------------------- + +Először is, a képzéssel, a használattal és az általános előnyökkel kapcsolatos költségek jelentősen eltérnek a rendszertől függően. A Latte templating rendszer a PHP szintaxis használatának köszönhetően nagyban leegyszerűsíti a tanulást az ezen a nyelven már jártas programozók számára. Egy programozónak általában néhány óra alatt sikerül kellőképpen megismerkednie a Latte-tel, ami csökkenti a képzési költségeket, felgyorsítja a technológia átvételét és - ami a legfontosabb - a mindennapi használat hatékonyságát. + +Emellett a Latte magas szintű védelmet nyújt az XSS sebezhetőséggel szemben az egyedülálló, kontextustudatos escaping technológiának köszönhetően. Ez a védelem kulcsfontosságú a webalkalmazások biztonságának biztosításához és a felhasználókat vagy a vállalati adatokat veszélyeztető támadások kockázatának minimalizálásához. A webalkalmazások biztonsága a vállalat jó hírnevének megőrzése szempontjából is fontos. A biztonsági problémák az ügyfelek bizalmának elvesztéséhez vezethetnek, és ronthatják a vállalat hírnevét a piacon. + +A Latte használata csökkenti az általános fejlesztési és karbantartási költségeket is, mivel mindkettő egyszerűbbé válik. Ezért egy templating rendszer használata mindenképpen megéri. + + +Befolyásolja-e a Latte a webes alkalmazások teljesítményét? .[#toc-does-latte-affect-the-performance-of-web-applications] +------------------------------------------------------------------------------------------------------------------------- + +Bár a Latte sablonok feldolgozása gyors, ez a szempont nem igazán számít. Ennek oka, hogy a fájlok elemzése csak egyszer történik meg az első megjelenítés során. Ezután PHP-kóddá fordítják le őket, a lemezen tárolják, és minden következő kérésnél újbóli fordítás nélkül futtatják őket. + +Ez így működik a termelési környezetben. A fejlesztés során a Latte sablonok minden alkalommal újrafordításra kerülnek, amikor tartalmuk megváltozik, így a fejlesztő mindig az aktuális verziót látja. diff --git a/latte/it/@left-menu.texy b/latte/it/@left-menu.texy index a10314ae6c..68e71464d5 100644 --- a/latte/it/@left-menu.texy +++ b/latte/it/@left-menu.texy @@ -1,4 +1,5 @@ - [Per iniziare |Guide] +- [Perché usare i modelli? |why-use] - Concetti - La [sicurezza prima di tutto |Safety First] - [Ereditarietà dei template |Template Inheritance] diff --git a/latte/it/why-use.texy b/latte/it/why-use.texy new file mode 100644 index 0000000000..e9c57d842b --- /dev/null +++ b/latte/it/why-use.texy @@ -0,0 +1,80 @@ +Perché usare i modelli? +*********************** + + +Perché usare un sistema di template in PHP? .[#toc-why-should-i-use-a-templating-system-in-php] +----------------------------------------------------------------------------------------------- + +Perché usare un sistema di template in PHP quando PHP stesso è un linguaggio di template? + +Ripercorriamo brevemente la storia di questo linguaggio, che è ricca di colpi di scena interessanti. Uno dei primi linguaggi di programmazione utilizzati per la generazione di pagine HTML è stato il linguaggio C. Tuttavia, ben presto ci si è resi conto che l'utilizzo di questo linguaggio per la generazione di pagine HTML non era sufficiente. Tuttavia, divenne presto evidente che utilizzarlo per questo scopo era poco pratico. Rasmus Lerdorf creò quindi PHP, che facilitava la generazione di HTML dinamico con il linguaggio C sul retro. Originariamente PHP era stato progettato come linguaggio di template, ma col tempo ha acquisito ulteriori funzionalità ed è diventato un linguaggio di programmazione a tutti gli effetti. + +Tuttavia, funziona ancora come un linguaggio di template. Un file PHP può contenere una pagina HTML, in cui le variabili vengono emesse con i caratteri ``, ecc. + +All'inizio della storia di PHP, è stato creato il sistema di template Smarty, con lo scopo di separare rigorosamente l'aspetto (HTML/CSS) dalla logica dell'applicazione. Il sistema forniva deliberatamente un linguaggio più limitato rispetto a PHP stesso, in modo che, ad esempio, uno sviluppatore non potesse fare una query al database da un template, ecc. D'altra parte, rappresentava una dipendenza aggiuntiva nei progetti, ne aumentava la complessità e richiedeva ai programmatori di imparare un nuovo linguaggio Smarty. Questi vantaggi sono stati controversi e per i template si è continuato a usare il semplice PHP. + +Col tempo, i sistemi di template hanno iniziato a diventare utili. Hanno introdotto concetti come l'[ereditarietà |template-inheritance], la [modalità sandbox |sandbox] e una serie di altre caratteristiche che hanno semplificato notevolmente la creazione di template rispetto al PHP puro. Il tema della sicurezza, l'esistenza di [vulnerabilità come gli XSS |safety-first] e la necessità dell'[escape |#What is escaping] sono venuti alla ribalta. I sistemi di template hanno introdotto l'escape automatico per eliminare il rischio che un programmatore lo dimenticasse e creasse una grave falla nella sicurezza (vedremo tra poco che questo comporta alcune insidie). + +Oggi i vantaggi dei sistemi di template superano di gran lunga i costi associati alla loro implementazione. Pertanto, ha senso utilizzarli. + + +Perché Latte è meglio di Twig o Blade? .[#toc-why-is-latte-better-than-twig-or-blade] +------------------------------------------------------------------------------------- + +Ci sono diversi motivi: alcuni sono piacevoli e altri sono immensamente utili. Latte è una combinazione di piacevole e utile. + +*Latte ha la stessa [sintassi di PHP |syntax#Latte Understands PHP]. L'unica differenza è nella notazione dei tag, preferendo i più brevi `{` e `}` invece di ``. Ciò significa che non è necessario imparare un nuovo linguaggio. I costi di formazione sono minimi. Soprattutto, durante lo sviluppo, non è necessario "passare" continuamente dal linguaggio PHP a quello dei template, perché sono entrambi uguali. A differenza dei template di Twig, che utilizzano il linguaggio Python, costringendo il programmatore a passare da un linguaggio all'altro. + +*Tutti i sistemi di template, come Twig, Blade o Smarty, si sono evoluti per includere una protezione contro gli XSS sotto forma di [escape |#What is escaping] automatico. Più precisamente, la chiamata automatica della funzione `htmlspecialchars()`. Tuttavia, i creatori di Latte si sono resi conto che questa non è affatto la soluzione giusta. Infatti, parti diverse del documento richiedono metodi di escape diversi. L'escape automatico ingenuo è una funzione pericolosa perché crea un falso senso di sicurezza. + +Affinché l'auto-escaping sia funzionale e affidabile, deve riconoscere in quale punto del documento vengono emessi i dati (che chiamiamo contesti) e scegliere la funzione di escape di conseguenza. Pertanto, deve essere [sensibile al contesto |safety-first#Context-Aware Escaping]. E questo è ciò che Latte può fare. Capisce l'HTML. Non percepisce il modello come una semplice stringa di caratteri, ma capisce cosa sono i tag, gli attributi e così via. Pertanto, esegue l'escape in modo diverso nel testo HTML, all'interno dei tag HTML, all'interno di JavaScript, ecc. + +Latte è il primo e unico sistema di template PHP con escape sensibile al contesto. Rappresenta l'unico sistema di template veramente sicuro. + +*E un'altra ragione piacevole:* Poiché Latte comprende l'HTML, offre altre caratteristiche molto piacevoli. Ad esempio, [n:attributi |syntax#n:attributes]. O la possibilità di [controllare i link |safety-first#Link checking]. E molte altre ancora. + + +Che cos'è l'escape? .[#toc-what-is-escaping] +-------------------------------------------- + +L'escape è un processo che consiste nel sostituire i caratteri con un significato speciale con sequenze corrispondenti quando si inserisce una stringa in un'altra per evitare effetti indesiderati o errori. Ad esempio, quando si inserisce una stringa in un testo HTML, in cui il carattere `<` ha un significato speciale perché indica l'inizio di un tag, lo si sostituisce con la sequenza corrispondente, che è l'entità HTML `<`. Questo permette al browser di visualizzare correttamente il simbolo `<`. + +Un semplice esempio di escape diretto nella scrittura del codice PHP è l'inserimento di una virgoletta in una stringa, anteponendo un backslash. + +L'escape è trattato in modo più dettagliato nel capitolo [Come difendersi dagli XSS |safety-first#How to Defend Against XSS?]. + + +È possibile eseguire una query al database da un template Latte? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +------------------------------------------------------------------------------------------------------------------------------- + +Nei modelli è possibile lavorare con gli oggetti che il programmatore passa loro. Se il programmatore vuole, può passare un oggetto del database al modello ed eseguire una query. Se intende farlo, non c'è motivo di impedirglielo. + +Una situazione diversa si presenta se si vuole dare ai clienti o ai programmatori esterni la possibilità di modificare i template. In questo caso, non si vuole assolutamente che abbiano accesso al database. Naturalmente, non si passerà l'oggetto database al template, ma cosa succede se si può accedere al database attraverso un altro oggetto? La soluzione è la [modalità sandbox |sandbox], che consente di definire quali metodi possono essere chiamati nei template. In questo modo, non ci si deve preoccupare di violazioni della sicurezza. + + +Quali sono le principali differenze tra i sistemi di template come Latte, Twig e Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Le differenze tra i sistemi di template come Latte, Twig e Blade risiedono principalmente nella sintassi, nella sicurezza e nell'integrazione con i framework: + +- Latte: utilizza la sintassi del linguaggio PHP, che lo rende più facile da imparare e da usare. Offre una protezione di alto livello contro gli attacchi XSS. +- Twig: utilizza una sintassi simile a quella di Python, molto diversa da quella di PHP. Esegue l'escape senza distinzione di contesto. È ben integrato con il framework Symfony. +- Blade: utilizza un mix di sintassi PHP e personalizzata. Esegue l'escape senza distinzione di contesto. È strettamente integrato con le funzionalità e l'ecosistema Laravel. + + +Vale la pena per le aziende utilizzare un sistema di template? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +------------------------------------------------------------------------------------------------------------------------------ + +Innanzitutto, i costi associati alla formazione, all'utilizzo e ai vantaggi complessivi variano notevolmente a seconda del sistema. Il sistema di template Latte, grazie all'uso della sintassi PHP, semplifica notevolmente l'apprendimento per i programmatori che hanno già familiarità con questo linguaggio. Di solito bastano poche ore perché un programmatore prenda confidenza con Latte, riducendo i costi di formazione e accelerando l'adozione della tecnologia e, soprattutto, l'efficienza nell'uso quotidiano. + +Inoltre, Latte offre un alto livello di protezione contro le vulnerabilità XSS grazie alla sua esclusiva tecnologia di escape context-aware. Questa protezione è fondamentale per garantire la sicurezza delle applicazioni web e ridurre al minimo il rischio di attacchi che potrebbero mettere in pericolo gli utenti o i dati aziendali. La sicurezza delle applicazioni web è importante anche per mantenere la buona reputazione di un'azienda. I problemi di sicurezza possono portare alla perdita di fiducia da parte dei clienti e danneggiare la reputazione dell'azienda sul mercato. + +L'uso di Latte riduce anche i costi complessivi di sviluppo e di manutenzione, rendendo entrambi più semplici. Pertanto, l'uso di un sistema di template vale sicuramente la pena. + + +Latte influisce sulle prestazioni delle applicazioni web? .[#toc-does-latte-affect-the-performance-of-web-applications] +----------------------------------------------------------------------------------------------------------------------- + +Anche se i modelli di Latte vengono elaborati rapidamente, questo aspetto non ha molta importanza. Il motivo è che il parsing dei file avviene solo una volta durante la prima visualizzazione. Vengono poi compilati in codice PHP, memorizzati su disco ed eseguiti a ogni richiesta successiva senza bisogno di ricompilazione. + +Questo è il modo in cui funziona in un ambiente di produzione. Durante lo sviluppo, i modelli Latte vengono ricompilati ogni volta che il loro contenuto viene modificato, in modo che lo sviluppatore veda sempre la versione corrente. diff --git a/latte/ja/@left-menu.texy b/latte/ja/@left-menu.texy index 0f32757aea..f0733f9e0b 100644 --- a/latte/ja/@left-menu.texy +++ b/latte/ja/@left-menu.texy @@ -1,4 +1,5 @@ - [はじめに |Guide] +- [なぜテンプレートを使うのか? |why-use] - コンセプト - [安全第一 |Safety First] - [テンプレート継承 |Template Inheritance] diff --git a/latte/ja/why-use.texy b/latte/ja/why-use.texy new file mode 100644 index 0000000000..4f544a403e --- /dev/null +++ b/latte/ja/why-use.texy @@ -0,0 +1,80 @@ +なぜテンプレートを使うのか? +************** + + +なぜPHPでテンプレートシステムを使用する必要があるのか? .[#toc-why-should-i-use-a-templating-system-in-php] +--------------------------------------------------------------------------------- + +PHP自体がテンプレート言語なのに、なぜPHPでテンプレートシステムを使うのか? + +まずは、興味深い紆余曲折を経たこの言語の歴史を簡単に振り返ってみましょう。HTMLページの生成に使われた最初のプログラミング言語のひとつにC言語がある。しかし、C言語をHTMLの生成に使うのは現実的でないことがわかった。そこでラスマス・レンドルフは、C言語をバックエンドに動的なHTMLを生成するPHPを開発した。PHPはもともとテンプレート言語として設計されましたが、時間の経過とともに機能が追加され、本格的なプログラミング言語となりました。 + +それでもなお、テンプレート言語として機能しています。PHP ファイルは HTML ページを含むことができ、その中で変数が出力されます。 ``などがあります。 + +PHPの歴史の初期に、外観(HTML/CSS)とアプリケーションロジックを厳密に分離する目的で、Smartyテンプレートシステムが作成されました。これは、意図的にPHP自体よりも制限された言語を提供し、例えば、開発者がテンプレートからデータベースクエリを作成することなどができないようにしました。その反面、プロジェクトに依存する部分が増え、複雑さを増し、プログラマーは新たにSmarty言語を習得する必要がありました。このような利点は賛否両論あり、テンプレートにはプレーンなPHPが使われ続けました。 + +時が経つにつれ、テンプレートシステムは便利なものになり始めました。テンプレートシステムは、[継承 |template-inheritance]、[サンドボックスモードなどの |sandbox]概念を導入し、純粋なPHPと比較してテンプレート作成を大幅に簡素化する様々な機能を備えています。そして、セキュリティの話題、[XSSのような脆弱 |safety-first]性の存在、[エスケープの |#What is escaping]必要性がクローズアップされるようになりました。テンプレートシステムでは、プログラマーがエスケープを忘れて深刻なセキュリティホールを作ってしまうリスクを排除するために、自動エスケープを導入しました(これには一定の落とし穴があることは、すぐにわかります)。 + +現在、テンプレートシステムのメリットは、その導入にかかるコストをはるかに上回っています。だから、使うことに意味があるのです。 + + +TwigやBladeよりもLatteの方が優れているのはなぜですか? .[#toc-why-is-latte-better-than-twig-or-blade] +--------------------------------------------------------------------------------- + +理由はいくつかありますが、楽しいものもあれば、ものすごく便利なものもあります。ラテは、心地よさと便利さを兼ね備えています。 + +*Latteは[PHPと |syntax#Latte Understands PHP]同じ[構文 |syntax#Latte Understands PHP]です。唯一の違いはタグの表記で、`` の代わりに、より短い`{` や`}` を好みます。つまり、新しい言語を学ぶ必要がないのです。トレーニングの費用も最小限に抑えられます。最も重要なのは、開発中に、PHP言語とテンプレート言語を常に「切り替える」必要がないことです。これは、Python言語を使用するTwigテンプレートとは異なり、プログラマーは2つの異なる言語を切り替えることを余儀なくされます。 + +*Twig、Blade、Smartyのようなすべてのテンプレートシステムは、自動[エスケープという |#What is escaping]形でXSSに対する保護を含むように進化してきました。より正確には、`htmlspecialchars()` 関数を自動的に呼び出すことです。しかし、Latteの制作者たちは、これがまったく正しい解決策ではないことに気づきました。というのも、文書の異なる部分には異なるエスケープ方法が必要だからです。ナイーブな自動エスケープは、誤った安心感を与えるため、危険な機能です。 + +自動エスケープが機能的で信頼できるものであるためには、データが文書中のどこに出力されているかを認識し(これをコンテキストと呼ぶ)、それに応じてエスケープ関数を選択する必要があります。従って、[文脈を考慮した |safety-first#Context-Aware Escaping]ものでなければならない。そして、これがLatteにできることなのです。ラテはHTMLを理解する。テンプレートを単なる文字列として認識するのではなく、タグや属性などが何であるかを理解している。そのため、HTMLテキスト内、HTMLタグ内、JavaScript内などで異なるエスケープを行います。 + +Latteは、文脈依存のエスケープを持つ最初で唯一のPHPテンプレートシステムです。また、真に安全な唯一のテンプレートシステムです。 + +*LatteはHTMLを理解するため、他にもとても楽しい機能を提供しています。例えば、[n:attributes |syntax#n:attributes]。あるいは[リンクをチェック |safety-first#Link checking]する機能。その他にもたくさんあります。 + + +エスケープとは何ですか? .[#toc-what-is-escaping] +------------------------------------- + +エスケープとは、ある文字列を別の文字列に挿入する際に、特殊な意味を持つ文字を対応する配列に置き換えて、不要な効果やエラーを防止する処理である。例えば、HTMLテキストに文字列を挿入する際、`<` という文字がタグの先頭を示すという特別な意味を持つ場合、これを対応する配列であるHTMLエンティティ`<` に置き換えます。これにより、ブラウザは`<` の記号を正しく表示することができます。 + +PHPのコードを書くときに直接エスケープする簡単な例として、バックスラッシュを前に置いて引用符を文字列に挿入することができます。 + +エスケープについては、「[XSSを防御する方法 |safety-first#How to Defend Against XSS?]」の章で詳しく説明しています。 + + +ラテのテンプレートからデータベースのクエリを実行することは可能ですか? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +-------------------------------------------------------------------------------------------------- + +テンプレートでは、プログラマが渡したオブジェクトを操作することができます。プログラマがその気になれば、テンプレートにデータベース・オブジェクトを渡してクエリを実行することができます。そうしようと思えば、それを妨げる理由はない。 + +クライアントや外部のコーダーにテンプレートを編集させる場合は、別の状況が発生します。この場合、彼らにデータベースへのアクセス権を与えたくないのは間違いありません。もちろん、テンプレートにデータベース・オブジェクトを渡すことはしませんが、他のオブジェクトを通してアクセスできる場合はどうでしょうか。その解決策が[サンドボックスモードで |sandbox]、テンプレートで呼び出せるメソッドを定義することができます。このおかげで、セキュリティ侵害を心配する必要はありません。 + + +Latte、Twig、Bladeなどのテンプレートシステムの主な違いは何ですか? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +----------------------------------------------------------------------------------------------------------------------------------- + +Latte、Twig、Bladeといったテンプレートシステムの違いは、主に構文、セキュリティ、フレームワークとの統合にある: + +- Latte:PHP言語の構文を使用するため、学習と使用が容易です。XSS攻撃に対して最高レベルの保護を提供します。 +- Twig: Pythonのような構文を使用しており、PHPとは全く異なる。文脈を区別せずにエスケープすることができます。Symfonyフレームワークとうまく統合されています。 +- Blade:PHPとカスタム構文のミックスを使用します。文脈を区別することなくエスケープします。Laravelの機能およびエコシステムと緊密に統合されています。 + + +企業がテンプレートシステムを使うことに意義はあるのか? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +------------------------------------------------------------------------------------------- + +まず、トレーニングにかかる費用、使用方法、そして全体的な利点は、システムによって大きく異なります。テンプレートシステム「Latte」は、PHPの文法を使っているため、PHPに慣れているプログラマーにとっては、学習が非常に簡単になる。プログラマーがLatteを十分に使いこなせるようになるには、通常数時間かかるため、トレーニングコストを削減し、技術の導入を加速させ、最も重要な日常使用における効率化を実現します。 + +さらに、Latteは、独自のコンテキストアウェアエスケープ技術により、XSS脆弱性に対する高度な保護を提供します。この保護機能は、Webアプリケーションのセキュリティを確保し、ユーザーや企業データを危険にさらす攻撃のリスクを最小化するために極めて重要です。また、Webアプリケーションのセキュリティは、企業の評判を維持するためにも重要です。セキュリティの問題は、顧客からの信頼を失い、市場における企業の評判を損なうことにつながります。 + +また、Latteを使うことで、開発コストとメンテナンスコストの両方が簡単になり、全体的なコストダウンにもつながります。したがって、テンプレートシステムを使うことは、間違いなく価値があります。 + + +LatteはWebアプリケーションのパフォーマンスに影響を与えるか? .[#toc-does-latte-affect-the-performance-of-web-applications] +------------------------------------------------------------------------------------------------ + +Latteのテンプレートは高速に処理されますが、この点はあまり重要ではありません。なぜなら、ファイルの解析は最初の表示時に一度だけ行われるからです。その後、PHPコードにコンパイルされ、ディスクに保存され、再コンパイルを必要とせずに、その後のリクエストごとに実行されます。 + +本番環境ではこのように動作しています。開発中、Latteのテンプレートは内容が変わるたびに再コンパイルされるため、開発者は常に最新版を見ることができます。 diff --git a/latte/pl/@left-menu.texy b/latte/pl/@left-menu.texy index 961cfb8509..c6d3b03a80 100644 --- a/latte/pl/@left-menu.texy +++ b/latte/pl/@left-menu.texy @@ -1,4 +1,5 @@ - [Zaczynając od Latte |guide] +- [Dlaczego warto używać szablonów? |why-use] - Koncepcje - [Bezpieczeństwo przede wszystkim |safety-first] - [Dziedziczenie szablonów |Template Inheritance] diff --git a/latte/pl/why-use.texy b/latte/pl/why-use.texy new file mode 100644 index 0000000000..d975bf6792 --- /dev/null +++ b/latte/pl/why-use.texy @@ -0,0 +1,80 @@ +Dlaczego warto używać szablonów? +******************************** + + +Dlaczego warto używać systemu szablonów w PHP? .[#toc-why-should-i-use-a-templating-system-in-php] +-------------------------------------------------------------------------------------------------- + +Po co używać systemu szablonów w PHP, skoro sam PHP jest językiem szablonów? + +Najpierw krótko podsumujmy historię tego języka, która jest pełna ciekawych zwrotów akcji. Jednym z pierwszych języków programowania wykorzystywanych do generowania stron HTML był język C. Szybko jednak okazało się, że używanie go do tego celu jest niepraktyczne. Rasmus Lerdorf stworzył więc PHP, który ułatwiał generowanie dynamicznego HTML z językiem C na zapleczu. PHP został pierwotnie zaprojektowany jako język szablonów, ale z czasem zyskał dodatkowe funkcje i stał się pełnoprawnym językiem programowania. + +Mimo to, nadal funkcjonuje jako język szablonów. Plik PHP może zawierać stronę HTML, w której zmienne są wyprowadzane za pomocą ``, itd. + +Na początku historii PHP powstał system szablonów Smarty, którego celem było ścisłe oddzielenie wyglądu (HTML/CSS) od logiki aplikacji. Celowo zapewniał on bardziej ograniczony język niż sam PHP, tak że np. programista nie mógł wykonać zapytania do bazy danych z szablonu itp. Z drugiej strony, stanowił dodatkową zależność w projektach, zwiększał ich złożoność i wymagał od programistów nauki nowego języka Smarty. Takie korzyści były kontrowersyjne, a do szablonów nadal używano zwykłego PHP. + +Z czasem systemy szablonów zaczęły być użyteczne. Wprowadziły one takie pojęcia jak [dziedziczenie |template-inheritance], [tryb piaskownicy |sandbox] i szereg innych cech, które znacznie uprościły tworzenie szablonów w porównaniu z czystym PHP. Na pierwszy plan wysunął się temat bezpieczeństwa, istnienia luk w zabezpieczeniach [takich jak XSS |safety-first], oraz konieczność [ucieczki |#What is escaping]. Systemy szablonów wprowadziły auto-escaping, aby wyeliminować ryzyko, że programista zapomni o tym i stworzy poważną dziurę w bezpieczeństwie (wkrótce zobaczymy, że ma to pewne pułapki). + +Obecnie korzyści płynące z zastosowania systemów szablonowych znacznie przewyższają koszty związane z ich wdrożeniem. Dlatego korzystanie z nich ma sens. + + +Dlaczego Latte jest lepsze niż Twig czy Blade? .[#toc-why-is-latte-better-than-twig-or-blade] +--------------------------------------------------------------------------------------------- + +Powodów jest kilka - niektóre są przyjemne, a inne ogromnie przydatne. Latte jest połączeniem przyjemnego z pożytecznym. + +*Po pierwsze, przyjemne:* Latte ma taką samą [składnię jak PHP |syntax#Latte Understands PHP]. Jedyną różnicą jest notacja znaczników, preferująca krótsze `{` i `}` zamiast ``. Oznacza to, że nie musisz uczyć się nowego języka. Koszty szkolenia są minimalne. Co najważniejsze, podczas rozwoju nie musisz ciągle "przełączać się" między językiem PHP a językiem szablonów, ponieważ oba są takie same. Jest to w przeciwieństwie do szablonów Twig, które używają języka Python, zmuszając programistę do przełączania się między dwoma różnymi językami. + +*Wszystkie systemy szablonów, takie jak Twig, Blade czy Smarty, ewoluowały tak, by zawierać ochronę przed XSS w postaci automatycznej [ucieczki |#What is escaping]. A dokładniej, automatycznego wywołania funkcji `htmlspecialchars()`. Twórcy Latte zdali sobie jednak sprawę, że nie jest to wcale właściwe rozwiązanie. Wynika to z faktu, że różne części dokumentu wymagają różnych metod escapingu. Naiwny auto-escaping jest niebezpieczną funkcją, ponieważ tworzy fałszywe poczucie bezpieczeństwa. + +Aby auto-escaping był funkcjonalny i niezawodny, musi rozpoznać, w którym miejscu dokumentu dane są wyprowadzane (nazywamy to kontekstami) i odpowiednio dobrać funkcję ucieczki. Dlatego musi być [wrażliwy na kontekst |safety-first#Context-Aware Escaping]. I to właśnie potrafi Latte. Rozumie on HTML. Nie postrzega szablonu jako zwykłego ciągu znaków, ale rozumie, czym są znaczniki, atrybuty itp. Dlatego ucieka inaczej w tekście HTML, wewnątrz znaczników HTML, wewnątrz JavaScript itp. + +Latte jest pierwszym i jedynym systemem szablonów PHP z ucieczką kontekstową. Jest to jedyny naprawdę bezpieczny system szablonów. + +*I jeszcze jeden przyjemny powód:* Ponieważ Latte rozumie HTML, oferuje inne bardzo przyjemne funkcje. Na przykład [n:attributes |syntax#n:attributes]. Albo możliwość [sprawdzania linków |safety-first#Link checking]. I wiele innych. + + +Co to jest escaping? .[#toc-what-is-escaping] +--------------------------------------------- + +Ucieczka to proces polegający na zastępowaniu znaków o specjalnym znaczeniu odpowiednimi sekwencjami podczas wstawiania jednego ciągu znaków do drugiego w celu uniknięcia niepożądanych efektów lub błędów. Na przykład wstawiając do tekstu HTML ciąg znaków, w którym znak `<` ma specjalne znaczenie, ponieważ oznacza początek znacznika, zastępujemy go odpowiednią sekwencją, którą jest encja HTML `<`. Dzięki temu przeglądarka poprawnie wyświetla symbol `<`. + +Prostym przykładem ucieczki bezpośrednio podczas pisania kodu PHP jest wstawienie do ciągu znaków cudzysłowu poprzez umieszczenie przed nim odwrotnego ukośnika. + +Ucieczkę omawiamy bardziej szczegółowo w rozdziale [Jak bronić się przed XSS |safety-first#How to Defend Against XSS?]. + + +Czy z szablonu Latte można wykonać zapytanie do bazy danych? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +--------------------------------------------------------------------------------------------------------------------------- + +W szablonach można pracować z obiektami, które przekazuje do nich programista. Jeśli programista chce, może przekazać do szablonu obiekt bazy danych i wykonać zapytanie. Jeśli zamierzają to zrobić, nie ma powodu, by im to uniemożliwić. + +Inna sytuacja pojawia się, jeśli chcesz dać klientom lub zewnętrznym koderom możliwość edycji szablonów. W tym przypadku zdecydowanie nie chcesz, aby mieli dostęp do bazy danych. Oczywiście nie przekażesz obiektu bazy danych do szablonu, ale co jeśli dostęp do niej będzie możliwy poprzez inny obiekt? Rozwiązaniem jest [tryb piaskownicy |sandbox], który pozwala zdefiniować, jakie metody mogą być wywoływane w szablonach. Dzięki temu nie musisz się martwić o naruszenie bezpieczeństwa. + + +Jakie są główne różnice pomiędzy systemami templatkowania takimi jak Latte, Twig i Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +Różnice pomiędzy systemami templatkowania takimi jak Latte, Twig i Blade polegają głównie na ich składni, bezpieczeństwie i integracji z frameworkami: + +- Latte: wykorzystuje składnię języka PHP, dzięki czemu jest łatwiejszy do nauczenia i użycia. Zapewnia najwyższej klasy ochronę przed atakami XSS. +- Twig: używa składni podobnej do Pythona, która jest zupełnie inna niż PHP. Ucieka bez rozróżniania kontekstu. Jest dobrze zintegrowany z frameworkiem Symfony. +- Blade: używa mieszanki PHP i własnej składni. Ucieka bez rozróżniania kontekstu. Jest ściśle zintegrowany z funkcjami i ekosystemem Laravel. + + +Czy warto, aby firmy korzystały z systemu szablonowania? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +------------------------------------------------------------------------------------------------------------------------ + +Po pierwsze, koszty związane ze szkoleniem, użytkowaniem i ogólnymi korzyściami różnią się znacznie w zależności od systemu. System szablonów Latte, dzięki wykorzystaniu składni PHP, znacznie ułatwia naukę programistom znającym już ten język. Zazwyczaj wystarczy kilka godzin, aby programista w wystarczającym stopniu zapoznał się z Latte, co zmniejsza koszty szkolenia i przyspiesza przyswajanie technologii, a co najważniejsze - efektywność w codziennym użytkowaniu. + +Dodatkowo Latte zapewnia wysoki poziom ochrony przed podatnością XSS dzięki unikalnej technologii context-aware escaping. Ochrona ta jest kluczowa dla zapewnienia bezpieczeństwa aplikacji internetowych i zminimalizowania ryzyka ataków, które mogłyby zagrozić użytkownikom lub danym firmowym. Bezpieczeństwo aplikacji internetowych jest również ważne dla utrzymania dobrej reputacji firmy. Problemy z bezpieczeństwem mogą prowadzić do utraty zaufania klientów i zniszczenia reputacji firmy na rynku. + +Korzystanie z Latte zmniejsza również ogólne koszty rozwoju i utrzymania aplikacji poprzez ułatwienie obu tych czynności. Dlatego korzystanie z systemu szablonowania jest zdecydowanie warte zachodu. + + +Czy Latte wpływa na wydajność aplikacji internetowych? .[#toc-does-latte-affect-the-performance-of-web-applications] +-------------------------------------------------------------------------------------------------------------------- + +Chociaż szablony Latte są przetwarzane szybko, ten aspekt nie ma większego znaczenia. Powodem jest to, że parsowanie plików występuje tylko raz podczas pierwszego wyświetlenia. Następnie są one kompilowane do kodu PHP, przechowywane na dysku i uruchamiane przy każdym kolejnym żądaniu bez konieczności ponownej kompilacji. + +Tak właśnie działa to w środowisku produkcyjnym. Podczas rozwoju szablony Latte są rekompilowane za każdym razem, gdy zmienia się ich zawartość, więc programista zawsze widzi aktualną wersję. diff --git a/latte/pt/@left-menu.texy b/latte/pt/@left-menu.texy index bc3950eae9..09fa4aa164 100644 --- a/latte/pt/@left-menu.texy +++ b/latte/pt/@left-menu.texy @@ -1,4 +1,5 @@ - [Como Começar |Guide] +- [Por que usar modelos? |why-use] - Conceitos - [Segurança em primeiro lugar |Safety First] - [Herança do modelo |Template Inheritance] diff --git a/latte/pt/why-use.texy b/latte/pt/why-use.texy new file mode 100644 index 0000000000..37d8855cdd --- /dev/null +++ b/latte/pt/why-use.texy @@ -0,0 +1,80 @@ +Por que usar modelos? +********************* + + +Por que eu deveria usar um sistema de modelos em PHP? .[#toc-why-should-i-use-a-templating-system-in-php] +--------------------------------------------------------------------------------------------------------- + +Por que usar um sistema de modelos no PHP se o próprio PHP é uma linguagem de modelos? + +Vamos primeiro recapitular brevemente a história dessa linguagem, que é cheia de reviravoltas interessantes. Uma das primeiras linguagens de programação usadas para gerar páginas HTML foi a linguagem C. No entanto, logo ficou claro que usá-la para esse fim não era prático. Rasmus Lerdorf criou então o PHP, que facilitou a geração de HTML dinâmico com a linguagem C no backend. O PHP foi originalmente projetado como uma linguagem de modelos, mas com o tempo adquiriu recursos adicionais e se tornou uma linguagem de programação completa. + +No entanto, ele ainda funciona como uma linguagem de modelos. Um arquivo PHP pode conter uma página HTML, na qual as variáveis são geradas usando ``, etc. + +No início da história do PHP, foi criado o sistema de modelos Smarty, com o objetivo de separar estritamente a aparência (HTML/CSS) da lógica do aplicativo. Ele deliberadamente forneceu uma linguagem mais limitada do que o próprio PHP, de modo que, por exemplo, um desenvolvedor não poderia fazer uma consulta ao banco de dados a partir de um modelo, etc. Por outro lado, ela representava uma dependência adicional nos projetos, aumentava sua complexidade e exigia que os programadores aprendessem uma nova linguagem Smarty. Esses benefícios foram controversos, e o PHP simples continuou a ser usado para modelos. + +Com o tempo, os sistemas de modelos começaram a se tornar úteis. Eles introduziram conceitos como [herança |template-inheritance], [modo sandbox |sandbox] e uma série de outros recursos que simplificaram significativamente a criação de modelos em comparação com o PHP puro. O tópico de segurança, a existência de [vulnerabilidades como XSS |safety-first] e a necessidade de [escape |#What is escaping] vieram à tona. Os sistemas de modelos introduziram o escape automático para eliminar o risco de um programador esquecê-lo e criar uma grave falha de segurança (veremos em breve que isso tem algumas armadilhas). + +Atualmente, os benefícios dos sistemas de modelos superam em muito os custos associados à sua implementação. Portanto, faz sentido usá-los. + + +Por que o Latte é melhor que o Twig ou o Blade? .[#toc-why-is-latte-better-than-twig-or-blade] +---------------------------------------------------------------------------------------------- + +Há vários motivos - alguns são agradáveis e outros são imensamente úteis. O Latte é uma combinação de agradável e útil. + +*Primeiro, o agradável:* O Latte tem a mesma [sintaxe do PHP |syntax#Latte Understands PHP]. A única diferença está na notação das tags, preferindo `{` e `}` mais curtos em vez de ``. Isso significa que você não precisa aprender um novo idioma. Os custos de treinamento são mínimos. O mais importante é que, durante o desenvolvimento, você não precisa "alternar" constantemente entre a linguagem PHP e a linguagem do modelo, pois ambas são a mesma. Isso é diferente dos modelos Twig, que usam a linguagem Python, forçando o programador a alternar entre duas linguagens diferentes. + +*Agora, o motivo extremamente útil:* Todos os sistemas de modelos, como Twig, Blade ou Smarty, evoluíram para incluir proteção contra XSS na forma de [escape |#What is escaping] automático. Mais precisamente, a chamada automática da função `htmlspecialchars()`. Entretanto, os criadores do Latte perceberam que essa não é a solução correta. Isso ocorre porque diferentes partes do documento exigem diferentes métodos de escape. O escape automático ingênuo é um recurso perigoso porque cria uma falsa sensação de segurança. + +Para que o escape automático seja funcional e confiável, ele deve reconhecer em que parte do documento os dados estão sendo gerados (chamamos isso de contextos) e escolher a função de escape de acordo. Portanto, ele deve ser [sensível ao contexto |safety-first#Context-Aware Escaping]. E é isso que o Latte pode fazer. Ele entende HTML. Ele não percebe o modelo como apenas uma sequência de caracteres, mas entende o que são tags, atributos etc. Portanto, ele faz escapes diferentes no texto HTML, nas tags HTML, no JavaScript etc. + +O Latte é o primeiro e único sistema de modelos PHP com escape sensível ao contexto. Ele representa o único sistema de modelos realmente seguro. + +*E outro motivo agradável: como o Latte entende HTML, ele oferece outros recursos muito agradáveis. Por exemplo, [n:attributes |syntax#n:attributes]. Ou a capacidade de [verificar links |safety-first#Link checking]. E muito mais. + + +O que é escape? .[#toc-what-is-escaping] +---------------------------------------- + +Escaping é um processo que envolve a substituição de caracteres com significados especiais por sequências correspondentes ao inserir uma cadeia de caracteres em outra para evitar efeitos indesejados ou erros. Por exemplo, ao inserir uma cadeia de caracteres em um texto HTML, no qual o caractere `<` tem um significado especial porque indica o início de uma tag, nós o substituímos pela sequência correspondente, que é a entidade HTML `<`. Isso permite que o navegador exiba corretamente o símbolo `<`. + +Um exemplo simples de escape direto ao escrever código PHP é inserir uma aspa em uma cadeia de caracteres colocando uma barra invertida na frente dela. + +Discutiremos o escape em mais detalhes no capítulo [Como se defender contra XSS |safety-first#How to Defend Against XSS?]. + + +Uma consulta ao banco de dados pode ser executada em um modelo Latte? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +------------------------------------------------------------------------------------------------------------------------------------ + +Nos modelos, você pode trabalhar com objetos que o programador passa para eles. Se o programador quiser, ele poderá passar um objeto de banco de dados para o modelo e executar uma consulta. Se ele pretende fazer isso, não há motivo para impedi-lo. + +Uma situação diferente ocorre se você quiser dar aos clientes ou programadores externos a capacidade de editar modelos. Nesse caso, você definitivamente não quer que eles tenham acesso ao banco de dados. É claro que você não passará o objeto de banco de dados para o modelo, mas e se ele puder ser acessado por meio de outro objeto? A solução é o [modo sandbox |sandbox], que permite que você defina quais métodos podem ser chamados nos modelos. Graças a isso, você não precisa se preocupar com violações de segurança. + + +Quais são as principais diferenças entre sistemas de gabaritos como Latte, Twig e Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +As diferenças entre sistemas de modelos como Latte, Twig e Blade residem principalmente em sua sintaxe, segurança e integração com as estruturas: + +- Latte: utiliza a sintaxe da linguagem PHP, facilitando a aprendizagem e o uso. Ele oferece proteção de primeira linha contra ataques XSS. +- Twig: utiliza uma sintaxe parecida com a do Python, que é bem diferente do PHP. Ele escapa sem distinção de contexto. Está bem integrado com a estrutura Symfony. +- Blade: utiliza uma mistura de PHP e sintaxe personalizada. Ela escapa sem distinção de contexto. Está bem integrado com as características de Laravel e o ecossistema. + + +Vale a pena para as empresas usar um sistema de modelos? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +------------------------------------------------------------------------------------------------------------------------ + +Em primeiro lugar, os custos associados ao treinamento, ao uso e aos benefícios gerais variam significativamente dependendo do sistema. O sistema de modelos Latte, graças ao seu uso da sintaxe PHP, simplifica muito o aprendizado para programadores já familiarizados com esta linguagem. Normalmente leva algumas horas para que um programador se familiarize suficientemente com o Latte, reduzindo os custos de treinamento e acelerando a adoção da tecnologia e, o mais importante, a eficiência no uso diário. + +Além disso, Latte oferece um alto nível de proteção contra a vulnerabilidade XSS, graças a sua tecnologia de escape sensível ao contexto único. Esta proteção é crucial para garantir a segurança das aplicações web e minimizar o risco de ataques que possam colocar em risco os usuários ou os dados da empresa. A segurança das aplicações web também é importante para manter a boa reputação de uma empresa. As questões de segurança podem levar à perda de confiança dos clientes e prejudicar a reputação da empresa no mercado. + +O uso do Latte também reduz os custos gerais de desenvolvimento e manutenção, tornando ambos mais fáceis. Portanto, o uso de um sistema de modelos vale definitivamente a pena. + + +O Latte afeta o desempenho dos aplicativos da Web? .[#toc-does-latte-affect-the-performance-of-web-applications] +---------------------------------------------------------------------------------------------------------------- + +Embora os modelos Latte sejam processados rapidamente, este aspecto realmente não importa. A razão é que os arquivos de análise ocorrem apenas uma vez durante a primeira exibição. Eles são então compilados em código PHP, armazenados em disco e executados em cada solicitação subseqüente sem necessidade de recompilação. + +É assim que funciona em um ambiente de produção. Durante o desenvolvimento, os modelos Latte são recompilados cada vez que seu conteúdo muda, de modo que o desenvolvedor sempre vê a versão atual. diff --git a/latte/ro/@left-menu.texy b/latte/ro/@left-menu.texy index 4caf1f8632..fd0ebd9728 100644 --- a/latte/ro/@left-menu.texy +++ b/latte/ro/@left-menu.texy @@ -1,4 +1,5 @@ - [Noțiuni introductive |Guide] +- [De ce să folosiți șabloane? |why-use] - Concepte - [Siguranța mai întâi |Safety First] - [Moștenirea șablonului |Template Inheritance] diff --git a/latte/ro/why-use.texy b/latte/ro/why-use.texy new file mode 100644 index 0000000000..2f086d950f --- /dev/null +++ b/latte/ro/why-use.texy @@ -0,0 +1,80 @@ +De ce să folosiți șabloane? +*************************** + + +De ce ar trebui să folosesc un sistem de șabloane în PHP? .[#toc-why-should-i-use-a-templating-system-in-php] +------------------------------------------------------------------------------------------------------------- + +De ce să folosiți un sistem de șabloane în PHP când PHP însuși este un limbaj de creare de șabloane? + +Să recapitulăm mai întâi pe scurt istoria acestui limbaj, care este plină de răsturnări de situație interesante. Unul dintre primele limbaje de programare utilizate pentru generarea de pagini HTML a fost limbajul C. Cu toate acestea, a devenit curând evident că utilizarea acestuia în acest scop era nepractică. Astfel, Rasmus Lerdorf a creat PHP, care a facilitat generarea de HTML dinamic cu ajutorul limbajului C în backend. PHP a fost conceput inițial ca un limbaj de modelare, dar în timp a dobândit caracteristici suplimentare și a devenit un limbaj de programare cu drepturi depline. + +Cu toate acestea, el funcționează în continuare ca un limbaj de modelare. Un fișier PHP poate conține o pagină HTML, în care variabilele sunt afișate cu ajutorul funcției ``, etc. + +La începutul istoriei PHP, a fost creat sistemul de șabloane Smarty, cu scopul de a separa strict aspectul (HTML/CSS) de logica aplicației. Acesta a oferit în mod deliberat un limbaj mai limitat decât PHP însuși, astfel încât, de exemplu, un programator nu putea face o interogare a bazei de date dintr-un șablon etc. Pe de altă parte, a reprezentat o dependență suplimentară în proiecte, a crescut complexitatea acestora și a cerut programatorilor să învețe un nou limbaj Smarty. Astfel de beneficii au fost controversate, iar PHP simplu a continuat să fie folosit pentru șabloane. + +Cu timpul, sistemele de șabloane au început să devină utile. Acestea au introdus concepte precum [moștenirea |template-inheritance], [modul sandbox |sandbox] și o serie de alte caracteristici care au simplificat semnificativ crearea de șabloane în comparație cu PHP pur. Subiectul securității, existența unor [vulnerabilități precum XSS |safety-first] și necesitatea de a [evada |#What is escaping] a ajuns în prim-plan. Sistemele de șabloane au introdus auto-escaparea pentru a elimina riscul ca un programator să o uite și să creeze o gaură de securitate serioasă (vom vedea în scurt timp că acest lucru are anumite capcane). + +Astăzi, beneficiile sistemelor de șabloane depășesc cu mult costurile asociate cu implementarea lor. Prin urmare, este logic să le folosim. + + +De ce este Latte mai bun decât Twig sau Blade? .[#toc-why-is-latte-better-than-twig-or-blade] +--------------------------------------------------------------------------------------------- + +Există mai multe motive - unele sunt plăcute, iar altele sunt extrem de utile. Latte este o combinație de plăcut și util. + +*În primul rând, plăcutul:* Latte are aceeași [sintaxă ca și PHP |syntax#Latte Understands PHP]. Singura diferență este în notarea etichetelor, preferând mai scurte `{` și `}` în loc de ``. Acest lucru înseamnă că nu trebuie să învățați un nou limbaj. Costurile de formare sunt minime. Cel mai important, în timpul dezvoltării, nu trebuie să "comutați" în mod constant între limbajul PHP și limbajul șabloanelor, deoarece ambele sunt identice. Acest lucru este diferit de șabloanele Twig, care utilizează limbajul Python, ceea ce obligă programatorul să treacă de la un limbaj la altul. + +*Acum, pentru motivul extrem de util:* Toate sistemele de șabloane, cum ar fi Twig, Blade sau Smarty, au evoluat pentru a include protecție împotriva XSS sub forma [scăpării |#What is escaping] automate. Mai exact, apelarea automată a funcției `htmlspecialchars()`. Cu toate acestea, creatorii lui Latte și-au dat seama că aceasta nu este deloc soluția potrivită. Acest lucru se datorează faptului că diferite părți ale documentului necesită diferite metode de escaping. Escaparea automată naivă este o funcție periculoasă, deoarece creează un fals sentiment de securitate. + +Pentru ca auto-escaping-ul să fie funcțional și fiabil, acesta trebuie să recunoască în ce parte a documentului sunt emise datele (numim aceste contexte) și să aleagă funcția de scăpare în consecință. Prin urmare, trebuie să fie [sensibilă la context |safety-first#Context-Aware Escaping]. Și asta este ceea ce poate face Latte. Înțelege HTML. Nu percepe șablonul ca pe un simplu șir de caractere, ci înțelege ce sunt etichetele, atributele etc. Prin urmare, el evadează diferit în textul HTML, în interiorul tag-urilor HTML, în interiorul JavaScript, etc. + +Latte este primul și singurul sistem de șabloane PHP cu escaping sensibil la context. Acesta reprezintă singurul sistem de șabloane cu adevărat sigur. + +*Și un alt motiv plăcut:* Deoarece Latte înțelege HTML, oferă și alte caracteristici foarte plăcute. De exemplu, [n:attributes |syntax#n:attributes]. Sau posibilitatea de a [verifica legăturile |safety-first#Link checking]. Și multe altele. + + +Ce înseamnă "escaping"? .[#toc-what-is-escaping] +------------------------------------------------ + +Escaping-ul este un proces care presupune înlocuirea caracterelor cu semnificații speciale cu secvențe corespunzătoare atunci când se inserează un șir de caractere în altul pentru a preveni efectele nedorite sau erorile. De exemplu, atunci când se inserează un șir în textul HTML, în care caracterul `<` are o semnificație specială deoarece indică începutul unei etichete, îl înlocuim cu secvența corespunzătoare, care este entitatea HTML `<`. Acest lucru permite browserului să afișeze corect simbolul `<`. + +Un exemplu simplu de evadare directă la scrierea codului PHP este inserarea unui ghilimele într-un șir de caractere prin plasarea unei backslash în fața acestuia. + +Discutăm mai detaliat despre escaping în capitolul [Cum să vă apărați împotriva XSS |safety-first#How to Defend Against XSS?]. + + +Poate fi executată o interogare a unei baze de date dintr-un șablon Latte? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +----------------------------------------------------------------------------------------------------------------------------------------- + +În șabloane, puteți lucra cu obiecte pe care programatorul le transmite. Dacă programatorul dorește, poate trece un obiect de bază de date în șablon și poate efectua o interogare. Dacă intenționează să facă acest lucru, nu există niciun motiv pentru a-i împiedica. + +O situație diferită apare dacă doriți să oferiți clienților sau programatorilor externi posibilitatea de a edita șabloanele. În acest caz, cu siguranță nu doriți ca aceștia să aibă acces la baza de date. Bineînțeles, nu veți trece obiectul bazei de date în șablon, dar ce se întâmplă dacă acesta poate fi accesat prin intermediul unui alt obiect? Soluția este [modul sandbox |sandbox], care vă permite să definiți ce metode pot fi apelate în șabloane. Datorită acestui lucru, nu trebuie să vă faceți griji cu privire la breșele de securitate. + + +Care sunt principalele diferențe între sistemele de modelare precum Latte, Twig și Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +Diferențele dintre sistemele de modelare precum Latte, Twig și Blade constau în principal în sintaxa, securitatea și integrarea cu cadrele: + +- Latte: utilizează sintaxa limbajului PHP, ceea ce îl face mai ușor de învățat și de utilizat. Oferă o protecție de top împotriva atacurilor XSS. +- Twig: utilizează o sintaxă de tip Python, care este destul de diferită de cea a limbajului PHP. Evadează fără distincție de context. Este bine integrat cu cadrul Symfony. +- Blade: utilizează un amestec de sintaxă PHP și sintaxă personalizată. Evadează fără distincție de context. Este foarte bine integrat cu caracteristicile și ecosistemul Laravel. + + +Merită pentru companii să folosească un sistem de template-uri? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +------------------------------------------------------------------------------------------------------------------------------- + +În primul rând, costurile asociate cu formarea, utilizarea și beneficiile generale variază semnificativ în funcție de sistem. Sistemul de modelare Latte, datorită utilizării sintaxei PHP, simplifică foarte mult învățarea pentru programatorii deja familiarizați cu acest limbaj. De obicei, unui programator îi sunt necesare câteva ore pentru a se familiariza suficient cu Latte, ceea ce reduce costurile de formare și accelerează adoptarea tehnologiei și, cel mai important, eficiența în utilizarea zilnică. + +În plus, Latte oferă un nivel ridicat de protecție împotriva vulnerabilității XSS datorită tehnologiei sale unice de evadare conștientă de context. Această protecție este crucială pentru a asigura securitatea aplicațiilor web și pentru a minimiza riscul de atacuri care ar putea pune în pericol utilizatorii sau datele companiei. De asemenea, securitatea aplicațiilor web este importantă pentru menținerea bunei reputații a unei companii. Problemele de securitate pot duce la pierderea încrederii din partea clienților și pot afecta reputația companiei pe piață. + +Utilizarea Latte reduce, de asemenea, costurile generale de dezvoltare și întreținere, facilitându-le pe ambele. Prin urmare, utilizarea unui sistem de modelare merită cu siguranță. + + +Afectează Latte performanța aplicațiilor web? .[#toc-does-latte-affect-the-performance-of-web-applications] +----------------------------------------------------------------------------------------------------------- + +Deși șabloanele Latte sunt procesate rapid, acest aspect nu contează cu adevărat. Motivul este că analiza fișierelor are loc o singură dată în timpul primei afișări. Ele sunt apoi compilate în cod PHP, stocate pe disc și rulate la fiecare solicitare ulterioară, fără a necesita recompilare. + +Acesta este modul în care funcționează într-un mediu de producție. În timpul dezvoltării, șabloanele Latte sunt recompilate de fiecare dată când conținutul lor se modifică, astfel încât dezvoltatorul vede întotdeauna versiunea curentă. diff --git a/latte/ru/@left-menu.texy b/latte/ru/@left-menu.texy index 16907cbe8e..98c9f92eca 100644 --- a/latte/ru/@left-menu.texy +++ b/latte/ru/@left-menu.texy @@ -1,4 +1,5 @@ - [Начало работы |Guide] +- [Зачем использовать шаблоны? |why-use] - Концепции - [Безопасность превыше всего |Safety First] - [Наследование шаблонов |Template Inheritance] diff --git a/latte/ru/why-use.texy b/latte/ru/why-use.texy new file mode 100644 index 0000000000..b33b264cec --- /dev/null +++ b/latte/ru/why-use.texy @@ -0,0 +1,80 @@ +Зачем использовать шаблоны? +*************************** + + +Почему я должен использовать систему шаблонов в PHP? .[#toc-why-should-i-use-a-templating-system-in-php] +-------------------------------------------------------------------------------------------------------- + +Зачем использовать систему шаблонов в PHP, если PHP сам является языком шаблонов? + +Давайте сначала кратко вспомним историю этого языка, которая полна интересных поворотов. Одним из первых языков программирования, использовавшихся для генерации HTML-страниц, был язык Си. Однако вскоре стало очевидно, что использовать его для этих целей нецелесообразно. Поэтому Расмус Лердорф создал PHP, который облегчил генерацию динамического HTML с использованием языка C на задней панели. Изначально PHP был разработан как язык шаблонов, но со временем он приобрел дополнительные возможности и стал полноценным языком программирования. + +Тем не менее, он по-прежнему функционирует как язык шаблонов. Файл PHP может содержать HTML-страницу, в которой переменные выводятся с помощью символов ``, и т.д. + +В начале истории PHP была создана система шаблонов Smarty, целью которой было строго отделить внешний вид (HTML/CSS) от логики приложения. Она сознательно предоставляла более ограниченный язык, чем сам PHP, так что, например, разработчик не мог сделать запрос к базе данных из шаблона и т.д. С другой стороны, он представлял собой дополнительную зависимость в проектах, увеличивал их сложность и требовал от программистов изучения нового языка Smarty. Такие преимущества были спорными, и обычный PHP продолжал использоваться для шаблонов. + +Со временем системы шаблонов начали становиться полезными. Они ввели такие понятия, как [наследование |template-inheritance], [режим песочницы |sandbox] и ряд других возможностей, которые значительно упростили создание шаблонов по сравнению с чистым PHP. На первый план вышла тема безопасности, существования таких [уязвимостей, как XSS |safety-first], и необходимости [экранирования |#What is escaping]. Шаблонные системы ввели автоэскейпинг, чтобы устранить риск того, что программист забудет его и создаст серьезную брешь в безопасности (вскоре мы увидим, что это имеет определенные недостатки). + +Сегодня преимущества шаблонных систем значительно превосходят затраты, связанные с их внедрением. Поэтому имеет смысл их использовать. + + +Почему Latte лучше, чем Twig или Blade? .[#toc-why-is-latte-better-than-twig-or-blade] +-------------------------------------------------------------------------------------- + +Есть несколько причин - некоторые из них приятные, а другие - чрезвычайно полезные. Latte - это комбинация приятного и полезного. + +*Сначала о приятном:* Latte имеет тот же [синтаксис, что и PHP |syntax#Latte Understands PHP]. Единственное различие заключается в обозначении тегов, предпочитая более короткие `{` и `}` вместо ``. Это означает, что вам не придется учить новый язык. Затраты на обучение минимальны. Самое главное, что во время разработки вам не придется постоянно "переключаться" между языком PHP и языком шаблонов, поскольку они оба одинаковы. Это отличается от шаблонов Twig, которые используют язык Python, заставляя программиста переключаться между двумя разными языками. + +*А теперь о чрезвычайно полезной причине:* Все системы шаблонов, такие как Twig, Blade или Smarty, эволюционировали и включают защиту от XSS в виде автоматического [экранирования |#What is escaping]. Точнее, автоматического вызова функции `htmlspecialchars()`. Однако создатели Latte поняли, что это совсем не верное решение. Это связано с тем, что разные части документа требуют разных методов экранирования. Наивное автоматическое экранирование - это опасная функция, потому что она создает ложное чувство безопасности. + +Чтобы автоэскейпинг был функциональным и надежным, он должен распознавать, в какой части документа выводятся данные (мы называем это контекстами), и выбирать функцию эскейпинга соответствующим образом. Поэтому она должна быть [чувствительной к контексту |safety-first#Context-Aware Escaping]. И это то, что может сделать Latte. Он понимает HTML. Он не воспринимает шаблон как просто строку символов, а понимает, что такое теги, атрибуты и т. д. Поэтому он по-разному экранирует в HTML-тексте, внутри HTML-тегов, внутри JavaScript и т.д. + +Latte - первая и единственная система шаблонов PHP с контекстно-зависимым экранированием. Она представляет собой единственную по-настоящему безопасную систему шаблонов. + +*И еще одна приятная причина:* Поскольку Latte понимает HTML, он предлагает другие очень приятные возможности. Например, [n:attributes |syntax#n:attributes]. Или возможность [проверки ссылок |safety-first#Link checking]. И многое другое. + + +Что такое экранирование? .[#toc-what-is-escaping] +------------------------------------------------- + +Эскейпинг - это процесс замены символов со специальным значением на соответствующие последовательности при вставке одной строки в другую для предотвращения нежелательных эффектов или ошибок. Например, при вставке строки в HTML-текст, в которой символ `<` имеет специальное значение, поскольку обозначает начало тега, мы заменяем его соответствующей последовательностью, которой является HTML-сущность `<`. Это позволяет браузеру правильно отобразить символ `<`. + +Простым примером экранирования непосредственно при написании PHP-кода является вставка кавычек в строку путем размещения перед ними обратной косой черты. + +Более подробно мы обсуждаем экранирование в главе [Как защититься от XSS |safety-first#How to Defend Against XSS?]. + + +Можно ли выполнить запрос к базе данных из шаблона Latte? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +------------------------------------------------------------------------------------------------------------------------ + +В шаблонах можно работать с объектами, которые им передает программист. Если программист захочет, он может передать шаблону объект базы данных и выполнить запрос. Если они намерены это сделать, то нет причин препятствовать им. + +Иная ситуация возникает, если вы хотите предоставить клиентам или внешним программистам возможность редактировать шаблоны. В этом случае вы определенно не захотите, чтобы они имели доступ к базе данных. Конечно, вы не будете передавать объект базы данных в шаблон, но что, если к нему можно получить доступ через другой объект? Решением является [режим песочницы |sandbox], который позволяет вам определить, какие методы могут быть вызваны в шаблонах. Благодаря этому вы можете не беспокоиться о нарушениях безопасности. + + +Каковы основные различия между такими системами шаблонов, как Latte, Twig и Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Различия между такими системами шаблонов, как Latte, Twig и Blade, в основном заключаются в их синтаксисе, безопасности и интеграции с фреймворками: + +- Latte: использует синтаксис языка PHP, что делает его более простым в изучении и использовании. Он обеспечивает первоклассную защиту от XSS-атак. +- Twig: использует Python-подобный синтаксис, который значительно отличается от PHP. Он экранирует без различия контекста. Хорошо интегрирован с фреймворком Symfony. +- Blade: использует смесь PHP и пользовательского синтаксиса. Не различает контекст. Он тесно интегрирован с функциями и экосистемой Laravel. + + +Стоит ли компаниям использовать систему шаблонов? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +----------------------------------------------------------------------------------------------------------------- + +Во-первых, затраты, связанные с обучением, использованием и общими преимуществами, существенно различаются в зависимости от системы. Система шаблонов Latte, благодаря использованию синтаксиса PHP, значительно упрощает обучение для программистов, уже знакомых с этим языком. Обычно программисту требуется несколько часов, чтобы достаточно хорошо освоить Latte, что позволяет снизить затраты на обучение и ускорить освоение технологии и, что самое главное, эффективность в повседневном использовании. + +Кроме того, Latte обеспечивает высокий уровень защиты от XSS-уязвимостей благодаря уникальной технологии контекстно-зависимого экранирования. Эта защита имеет решающее значение для обеспечения безопасности веб-приложений и минимизации риска атак, которые могут поставить под угрозу пользователей или данные компании. Безопасность веб-приложений также важна для поддержания хорошей репутации компании. Проблемы с безопасностью могут привести к потере доверия со стороны клиентов и нанести ущерб репутации компании на рынке. + +Использование Latte также снижает общие затраты на разработку и сопровождение, упрощая и то, и другое. Поэтому использование системы шаблонов определенно стоит того. + + +Влияет ли Latte на производительность веб-приложений? .[#toc-does-latte-affect-the-performance-of-web-applications] +------------------------------------------------------------------------------------------------------------------- + +Хотя шаблоны Latte обрабатываются быстро, этот аспект не имеет особого значения. Причина в том, что парсинг файлов происходит только один раз во время первого показа. Затем они компилируются в PHP-код, сохраняются на диске и запускаются при каждом последующем запросе, не требуя повторной компиляции. + +Вот как это работает в производственной среде. Во время разработки шаблоны Latte перекомпилируются каждый раз, когда меняется их содержимое, поэтому разработчик всегда видит актуальную версию. diff --git a/latte/sl/@left-menu.texy b/latte/sl/@left-menu.texy index 4f1e442445..ba4b8060d8 100644 --- a/latte/sl/@left-menu.texy +++ b/latte/sl/@left-menu.texy @@ -1,4 +1,5 @@ - [Začetek |Guide] +- [Zakaj uporabljati predloge? |why-use] - Pojmi - [Najprej varnost |Safety First] - [Dedovanje predlog |Template Inheritance] diff --git a/latte/sl/why-use.texy b/latte/sl/why-use.texy new file mode 100644 index 0000000000..22cc80f41e --- /dev/null +++ b/latte/sl/why-use.texy @@ -0,0 +1,80 @@ +Zakaj uporabljati predloge? +*************************** + + +Zakaj naj v PHP uporabljam sistem predlog? .[#toc-why-should-i-use-a-templating-system-in-php] +---------------------------------------------------------------------------------------------- + +Zakaj bi v PHP uporabljali sistem predlog, če je PHP sam jezik za oblikovanje predlog? + +Najprej na kratko obnovimo zgodovino tega jezika, ki je polna zanimivih preobratov. Eden prvih programskih jezikov, ki se je uporabljal za izdelavo strani HTML, je bil jezik C. Vendar se je kmalu izkazalo, da je njegova uporaba v ta namen nepraktična. Zato je Rasmus Lerdorf ustvaril PHP, ki je omogočal generiranje dinamičnega HTML z jezikom C v ozadju. PHP je bil prvotno zasnovan kot jezik za oblikovanje predlog, vendar je sčasoma pridobil dodatne funkcije in postal polnopravni programski jezik. + +Kljub temu še vedno deluje kot jezik za oblikovanje predlog. Datoteka PHP lahko vsebuje stran HTML, v kateri se spremenljivke izpišejo z uporabo ``, itd. + +Na začetku zgodovine jezika PHP je bil ustvarjen sistem predlog Smarty, katerega namen je bil strogo ločiti videz (HTML/CSS) od aplikacijske logike. Namenoma je zagotavljal bolj omejen jezik kot sam PHP, tako da razvijalec na primer ni mogel iz predloge opraviti poizvedbe po zbirki podatkov itd. Po drugi strani pa je predstavljal dodatno odvisnost v projektih, povečal njihovo kompleksnost in od programerjev zahteval, da se naučijo novega jezika Smarty. Takšne prednosti so bile sporne, zato se je za predloge še naprej uporabljal navaden PHP. + +Sčasoma so sistemi predlog začeli postajati uporabni. Uvedli so koncepte, kot so [dedovanje |template-inheritance], [način peskovnika |sandbox] in številne druge funkcije, ki so v primerjavi s čistim PHP bistveno poenostavile ustvarjanje predlog. V ospredje so prišli varnost, obstoj [ranljivosti, kot je XSS, |safety-first] in potreba po [pobegih |#What is escaping]. Sistemi predlog so uvedli samodejno izrivanje, da bi odpravili tveganje, da bi programer pozabil na to in ustvaril resno varnostno luknjo (kmalu bomo videli, da ima to določene pasti). + +Danes so prednosti sistemov predlog veliko večje od stroškov, povezanih z njihovo uvedbo. Zato jih je smiselno uporabljati. + + +Zakaj je Latte boljši od Twiga ali Bladea? .[#toc-why-is-latte-better-than-twig-or-blade] +----------------------------------------------------------------------------------------- + +Razlogov je več - nekateri so prijetni, drugi izjemno uporabni. Latte je kombinacija prijetnega in uporabnega. + +*Najprej prijetno:* Latte ima enako [sintakso kot PHP |syntax#Latte Understands PHP]. Edina razlika je v zapisu oznak, saj ima raje krajše `{` in `}` namesto ``. To pomeni, da se vam ni treba učiti novega jezika. Stroški usposabljanja so minimalni. Najpomembneje pa je, da vam med razvojem ni treba nenehno "preklapljati" med jezikom PHP in jezikom predlog, saj sta oba enaka. Za razliko od predlog Twig, ki uporabljajo jezik Python, mora programer preklapljati med dvema različnima jezikoma. + +* Zdaj pa še izjemno uporaben razlog:* Vsi sistemi predlog, kot so Twig, Blade ali Smarty, so se razvili tako, da vključujejo zaščito pred XSS v obliki samodejnega [eskapiranja |#What is escaping]. Natančneje, samodejni klic funkcije `htmlspecialchars()`. Vendar so ustvarjalci sistema Latte ugotovili, da to sploh ni prava rešitev. Razlog za to je, da različni deli dokumenta zahtevajo različne metode escapiranja. Naivno samodejno izpisovanje je nevarna funkcija, saj ustvarja lažen občutek varnosti. + +Da bi bilo samodejno izpisovanje funkcionalno in zanesljivo, mora prepoznati, kje v dokumentu se podatki izpisujejo (imenujemo jih konteksti), in ustrezno izbrati funkcijo izpisovanja. Zato mora biti [občutljivo na kontekst |safety-first#Context-Aware Escaping]. In to zna Latte. Razume HTML. Predloge ne dojema le kot niz znakov, temveč razume, kaj so oznake, atributi itd. Zato različno eskapira v besedilu HTML, znotraj oznak HTML, znotraj JavaScripta itd. + +Latte je prvi in edini sistem predlog PHP s kontekstno občutljivim eskapiranjem. Predstavlja edini resnično varen sistem predlog. + +*In še en prijeten razlog:* Ker Latte razume HTML, ponuja še druge zelo prijetne funkcije. Na primer, [n:atributi |syntax#n:attributes]. ali možnost [preverjanja povezav |safety-first#Link checking]. In še veliko več. + + +Kaj je escaping? .[#toc-what-is-escaping] +----------------------------------------- + +Escaping je postopek, ki vključuje zamenjavo znakov s posebnim pomenom z ustreznimi zaporedji pri vstavljanju enega niza v drugega, da se preprečijo neželeni učinki ali napake. Na primer, pri vstavljanju niza v besedilo HTML, v katerem ima znak `<` poseben pomen, saj označuje začetek oznake, ga nadomestimo z ustreznim zaporedjem, ki je entiteta HTML `<`. Tako lahko brskalnik pravilno prikaže simbol `<`. + +Preprost primer neposrednega pobega pri pisanju kode PHP je vstavljanje narekovaja v niz tako, da pred njega postavimo povratno poševnico. + +Podrobneje o pobegih govorimo v poglavju [Kako se braniti pred XSS |safety-first#How to Defend Against XSS?]. + + +Ali je mogoče iz predloge Latte izvesti poizvedbo v zbirko podatkov? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +----------------------------------------------------------------------------------------------------------------------------------- + +V predlogah lahko delate s predmeti, ki jim jih posreduje programer. Če programer želi, lahko predlogi posreduje objekt podatkovne zbirke in izvede poizvedbo. Če nameravajo to storiti, ni razloga, da bi jim to preprečili. + +Drugačen položaj nastane, če želite strankam ali zunanjim programerjem omogočiti urejanje predlog. V tem primeru zagotovo ne želite, da bi imeli dostop do podatkovne zbirke. Seveda objekta podatkovne zbirke ne boste posredovali predlogi, kaj pa, če je do nje mogoče dostopati prek drugega objekta? Rešitev je [način peskovnika |sandbox], ki vam omogoča, da določite, katere metode se lahko kličejo v predlogah. Zaradi tega vam ni treba skrbeti za varnostne kršitve. + + +Katere so glavne razlike med sistemi za oblikovanje predlog, kot so Latte, Twig in Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +Razlike med sistemi za oblikovanje predlog, kot so Latte, Twig in Blade, so predvsem v njihovi sintaksi, varnosti in integraciji z ogrodji: + +- Latte: uporablja sintakso jezika PHP, zato se ga je lažje naučiti in uporabljati. Zagotavlja vrhunsko zaščito pred napadi XSS. +- Twig: uporablja sintakso, podobno jeziku Python, ki se precej razlikuje od PHP. Izhaja brez razlikovanja konteksta. Dobro je integriran z ogrodjem Symfony. +- Blade: uporablja mešanico sintakse PHP in lastne sintakse. Izhaja brez razlikovanja konteksta. Tesno je povezan s funkcijami in ekosistemom Laravel. + + +Ali se podjetjem splača uporabljati sistem za oblikovanje predlog? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +---------------------------------------------------------------------------------------------------------------------------------- + +Prvič, stroški, povezani z usposabljanjem, uporabo in splošnimi koristmi, se močno razlikujejo glede na sistem. Sistem za oblikovanje predlog Latte zaradi uporabe sintakse PHP močno poenostavi učenje za programerje, ki so že seznanjeni s tem jezikom. Običajno programer potrebuje nekaj ur, da se dovolj dobro seznani s sistemom Latte, kar zmanjša stroške usposabljanja in pospeši uvajanje tehnologije ter, kar je najpomembneje, učinkovitost pri vsakodnevni uporabi. + +Poleg tega program Latte zagotavlja visoko raven zaščite pred ranljivostmi XSS zaradi svoje edinstvene tehnologije pobegov, ki upošteva kontekst. Ta zaščita je ključnega pomena za zagotavljanje varnosti spletnih aplikacij in zmanjševanje tveganja napadov, ki bi lahko ogrozili uporabnike ali podatke podjetja. Varnost spletnih aplikacij je pomembna tudi za ohranjanje dobrega ugleda podjetja. Varnostne težave lahko povzročijo izgubo zaupanja strank in škodijo ugledu podjetja na trgu. + +Z uporabo Latte se zmanjšajo tudi skupni stroški razvoja in vzdrževanja, saj je oboje lažje. Zato se uporaba sistema za oblikovanje predlog vsekakor splača. + + +Ali Latte vpliva na zmogljivost spletnih aplikacij? .[#toc-does-latte-affect-the-performance-of-web-applications] +----------------------------------------------------------------------------------------------------------------- + +Čeprav se predloge Latte obdelujejo hitro, ta vidik ni pomemben. Razlog je v tem, da se razčlenjevanje datotek izvede samo enkrat med prvim prikazom. Nato se sestavijo v kodo PHP, shranijo na disk in se zaženejo pri vsakem naslednjem zahtevku, ne da bi bilo potrebno ponovno sestavljanje. + +Tako deluje v produkcijskem okolju. Med razvojem se predloge Latte ponovno sestavijo vsakič, ko se spremeni njihova vsebina, zato razvijalec vedno vidi trenutno različico. diff --git a/latte/tr/@left-menu.texy b/latte/tr/@left-menu.texy index 83a4693ecc..297637d462 100644 --- a/latte/tr/@left-menu.texy +++ b/latte/tr/@left-menu.texy @@ -1,4 +1,5 @@ - [Başlarken |Guide] +- [Neden Şablon Kullanmalı? |why-use] - Kavramlar - [Önce Güvenlik |Safety First] - [Şablon Kalıtımı |Template Inheritance] diff --git a/latte/tr/why-use.texy b/latte/tr/why-use.texy new file mode 100644 index 0000000000..ada364fd6f --- /dev/null +++ b/latte/tr/why-use.texy @@ -0,0 +1,80 @@ +Neden Şablon Kullanmalı? +************************ + + +PHP'de neden bir şablonlama sistemi kullanmalıyım? .[#toc-why-should-i-use-a-templating-system-in-php] +------------------------------------------------------------------------------------------------------ + +PHP'nin kendisi bir şablonlama dili iken neden PHP'de bir şablon sistemi kullanılsın? + +Öncelikle bu dilin ilginç dönemeçlerle dolu tarihini kısaca özetleyelim. HTML sayfaları oluşturmak için kullanılan ilk programlama dillerinden biri C diliydi. Ancak kısa süre sonra bu dili bu amaçla kullanmanın pratik olmadığı anlaşıldı. Bunun üzerine Rasmus Lerdorf, arka uçta C dili ile dinamik HTML oluşturulmasını kolaylaştıran PHP'yi yarattı. PHP başlangıçta bir şablonlama dili olarak tasarlanmıştı, ancak zamanla ek özellikler kazandı ve tam teşekküllü bir programlama dili haline geldi. + +Bununla birlikte, hala bir şablonlama dili olarak işlev görmektedir. Bir PHP dosyası bir HTML sayfası içerebilir, burada değişkenler ``vb. + +PHP'nin tarihinin başlarında Smarty şablon sistemi, görünümü (HTML/CSS) uygulama mantığından kesin olarak ayırmak amacıyla oluşturulmuştur. Kasıtlı olarak PHP'nin kendisinden daha sınırlı bir dil sağladı, böylece örneğin bir geliştirici bir şablondan bir veritabanı sorgusu yapamadı, vb. Öte yandan, projelerde ek bir bağımlılığı temsil ediyor, karmaşıklıklarını artırıyor ve programcıların yeni bir Smarty dili öğrenmelerini gerektiriyordu. Bu tür faydalar tartışmalıydı ve şablonlar için düz PHP kullanılmaya devam etti. + +Zamanla şablon sistemleri kullanışlı hale gelmeye başladı. [Kalıtım |template-inheritance], [sandbox modu |sandbox] ve saf PHP'ye kıyasla şablon oluşturmayı önemli ölçüde basitleştiren bir dizi başka özellik gibi kavramları tanıttılar. Güvenlik konusu, [XSS gibi |safety-first] güvenlik [açıklarının |safety-first] varlığı ve [kaçış |#What is escaping] ihtiyacı ön plana çıktı. Şablon sistemleri, bir programcının bunu unutması ve ciddi bir güvenlik açığı yaratması riskini ortadan kaldırmak için otomatik kaçış özelliğini getirdi (bunun bazı tuzakları olduğunu birazdan göreceğiz). + +Günümüzde şablon sistemlerin faydaları, dağıtımlarıyla ilgili maliyetlerden çok daha ağır basmaktadır. Bu nedenle, bunları kullanmak mantıklıdır. + + +Latte neden Twig veya Blade'den daha iyi? .[#toc-why-is-latte-better-than-twig-or-blade] +---------------------------------------------------------------------------------------- + +Bunun çeşitli nedenleri vardır - bazıları hoş, bazıları ise son derece yararlıdır. Latte, hoş ve yararlı olanın bir kombinasyonudur. + +*İlk olarak, hoş:* Latte, [PHP |syntax#Latte Understands PHP] ile aynı [sözdizimine |syntax#Latte Understands PHP] sahiptir. Tek fark etiketlerin gösteriminde, `` yerine daha kısa olan `{` ve `}` tercih ediliyor. Bu, yeni bir dil öğrenmek zorunda olmadığınız anlamına gelir. Eğitim maliyetleri minimum düzeydedir. En önemlisi, geliştirme sırasında PHP dili ile şablon dili arasında sürekli "geçiş" yapmak zorunda kalmazsınız, çünkü ikisi de aynıdır. Bu, Python dilini kullanan Twig şablonlarının aksine, programcıyı iki farklı dil arasında geçiş yapmaya zorlar. + +*Şimdi son derece yararlı bir nedene gelelim:* Twig, Blade veya Smarty gibi tüm şablon sistemleri, otomatik [kaçış |#What is escaping] şeklinde XSS'ye karşı koruma içerecek şekilde gelişmiştir. Daha doğrusu, `htmlspecialchars()` işlevinin otomatik olarak çağrılması. Ancak Latte'nin yaratıcıları bunun hiç de doğru bir çözüm olmadığını fark ettiler. Bunun nedeni, belgenin farklı bölümlerinin farklı kaçış yöntemleri gerektirmesidir. Naif otomatik kaçış tehlikeli bir özelliktir çünkü yanlış bir güvenlik hissi yaratır. + +Otomatik kaçışın işlevsel ve güvenilir olması için, verinin belgenin neresinde çıktılandığını (bunlara bağlam diyoruz) tanıması ve kaçış işlevini buna göre seçmesi gerekir. Bu nedenle, [bağlama duyarlı |safety-first#Context-Aware Escaping] olmalıdır. Latte'nin yapabildiği de budur. HTML'i anlar. Şablonu sadece bir karakter dizisi olarak algılamaz, ancak etiketlerin, niteliklerin vb. ne olduğunu anlar. Bu nedenle, HTML metni içinde, HTML etiketleri içinde, JavaScript içinde vb. farklı kaçışlar yapar. + +Latte, içeriğe duyarlı kaçış özelliğine sahip ilk ve tek PHP şablon sistemidir. Gerçekten güvenli tek şablon sistemini temsil eder. + +*Ve bir başka hoş neden:* Latte HTML'yi anladığı için, çok hoş başka özellikler de sunuyor. Örneğin, [n:attributes |syntax#n:attributes]. Ya da [bağlantıları kontrol |safety-first#Link checking] etme yeteneği. Ve çok daha fazlası. + + +Kaçmak nedir? .[#toc-what-is-escaping] +-------------------------------------- + +Kaçış, istenmeyen etkileri veya hataları önlemek için bir dizeyi başka bir dizeye eklerken özel anlamları olan karakterleri karşılık gelen dizilerle değiştirmeyi içeren bir işlemdir. Örneğin, `<` karakterinin bir etiketin başlangıcını gösterdiği için özel bir anlama sahip olduğu HTML metnine bir dize eklerken, bu karakteri `<` HTML varlığı olan ilgili diziyle değiştiririz. Bu, tarayıcının `<` sembolünü doğru şekilde görüntülemesini sağlar. + +PHP kodu yazarken doğrudan kaçış yapmanın basit bir örneği, önüne ters eğik çizgi koyarak bir dizeye tırnak işareti eklemektir. + +Kaçış konusunu [XSS'ye karşı savunma |safety-first#How to Defend Against XSS?] bölümünde daha ayrıntılı olarak ele alacağız. + + +Latte şablonundan bir veritabanı sorgusu çalıştırılabilir mi? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +---------------------------------------------------------------------------------------------------------------------------- + +Şablonlarda, programcının kendilerine aktardığı nesnelerle çalışabilirsiniz. Programcı isterse şablona bir veritabanı nesnesi aktarabilir ve bir sorgu gerçekleştirebilir. Bunu yapmak istiyorlarsa, onları engellemek için bir neden yoktur. + +Müşterilere veya harici kodlayıcılara şablonları düzenleme olanağı vermek istiyorsanız farklı bir durum ortaya çıkar. Bu durumda, kesinlikle veritabanına erişmelerini istemezsiniz. Elbette veritabanı nesnesini şablona aktarmayacaksınız, ancak ya başka bir nesne aracılığıyla erişilebiliyorsa? Çözüm, şablonlarda hangi yöntemlerin çağrılabileceğini tanımlamanıza olanak tanıyan [sandbox modudur |sandbox]. Bu sayede güvenlik ihlalleri konusunda endişelenmenize gerek kalmaz. + + +Latte, Twig ve Blade gibi şablonlama sistemleri arasındaki temel farklar nelerdir? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Latte, Twig ve Blade gibi şablonlama sistemleri arasındaki farklar temel olarak sözdizimleri, güvenlikleri ve çerçevelerle entegrasyonlarında yatmaktadır: + +- Latte: PHP dili sözdizimini kullanarak öğrenmeyi ve kullanmayı kolaylaştırır. XSS saldırılarına karşı birinci sınıf koruma sağlar. +- Twig: PHP'den oldukça farklı olan Python benzeri sözdizimi kullanır. Bağlam ayrımı yapmadan kaçar. Symfony çerçevesi ile iyi entegre edilmiştir. +- Blade: PHP ve özel sözdiziminin bir karışımını kullanır. Bağlam ayrımı olmadan kaçış yapar. Laravel özellikleri ve ekosistemi ile sıkı bir şekilde entegre edilmiştir. + + +Şirketler için bir şablon sistemi kullanmaya değer mi? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +---------------------------------------------------------------------------------------------------------------------- + +İlk olarak, eğitim, kullanım ve genel faydalarla ilgili maliyetler sisteme bağlı olarak önemli ölçüde değişir. Latte şablonlama sistemi, PHP sözdizimini kullanması sayesinde, bu dile zaten aşina olan programcılar için öğrenmeyi büyük ölçüde kolaylaştırır. Bir programcının Latte ile yeterince tanışması genellikle birkaç saat alır, bu da eğitim maliyetlerini azaltır ve teknolojinin benimsenmesini ve en önemlisi günlük kullanımda verimliliği hızlandırır. + +Ayrıca Latte, içeriğe duyarlı benzersiz kaçış teknolojisi sayesinde XSS güvenlik açığına karşı yüksek düzeyde koruma sağlar. Bu koruma, web uygulaması güvenliğini sağlamak ve kullanıcıları veya şirket verilerini tehlikeye atabilecek saldırı riskini en aza indirmek için çok önemlidir. Web uygulaması güvenliği, bir şirketin iyi itibarını korumak için de önemlidir. Güvenlik sorunları müşterilerin güven kaybına yol açabilir ve şirketin pazardaki itibarına zarar verebilir. + +Latte kullanmak, her ikisini de kolaylaştırarak genel geliştirme ve bakım maliyetlerini de azaltır. Bu nedenle, bir şablonlama sistemi kullanmak kesinlikle buna değer. + + +Latte web uygulamalarının performansını etkiler mi? .[#toc-does-latte-affect-the-performance-of-web-applications] +----------------------------------------------------------------------------------------------------------------- + +Latte şablonları hızlı bir şekilde işlense de, bu özellik gerçekten önemli değildir. Bunun nedeni, dosyaların ayrıştırılmasının ilk görüntüleme sırasında yalnızca bir kez gerçekleşmesidir. Daha sonra PHP koduna derlenir, diskte saklanır ve sonraki her istekte yeniden derleme gerektirmeden çalıştırılırlar. + +Üretim ortamında bu şekilde çalışır. Geliştirme sırasında, Latte şablonları içerikleri her değiştiğinde yeniden derlenir, böylece geliştirici her zaman geçerli sürümü görür. diff --git a/latte/uk/@left-menu.texy b/latte/uk/@left-menu.texy index 38cf9d16af..b1aa36563b 100644 --- a/latte/uk/@left-menu.texy +++ b/latte/uk/@left-menu.texy @@ -1,4 +1,5 @@ - [Початок роботи |Guide] +- [Навіщо використовувати шаблони? |why-use] - Концепції - [Безпека понад усе |Safety First] - Успадкування [шаблонів |Template Inheritance] diff --git a/latte/uk/why-use.texy b/latte/uk/why-use.texy new file mode 100644 index 0000000000..02572234e1 --- /dev/null +++ b/latte/uk/why-use.texy @@ -0,0 +1,80 @@ +Навіщо використовувати шаблони? +******************************* + + +Навіщо використовувати систему шаблонів в PHP? .[#toc-why-should-i-use-a-templating-system-in-php] +-------------------------------------------------------------------------------------------------- + +Навіщо використовувати систему шаблонів в PHP, якщо PHP сам по собі є мовою шаблонів? + +Давайте спочатку коротко згадаємо історію цієї мови, яка сповнена цікавих поворотів. Однією з перших мов програмування, яка використовувалася для створення HTML-сторінок, була мова C. Однак незабаром стало очевидно, що використовувати її для цієї мети недоцільно. Таким чином, Расмус Лердорф створив PHP, який полегшив генерацію динамічного HTML за допомогою мови C на серверній стороні. Спочатку PHP був розроблений як мова шаблонів, але з часом він набув додаткових можливостей і став повноцінною мовою програмування. + +Тим не менш, вона все ще функціонує як мова шаблонів. PHP-файл може містити HTML-сторінку, в якій змінні виводяться за допомогою ``тощо. + +На початку історії PHP була створена система шаблонів Smarty, яка мала на меті чітко відокремити зовнішній вигляд (HTML/CSS) від логіки програми. Вона свідомо надавала більш обмежену мову, ніж сам PHP, щоб, наприклад, розробник не міг зробити запит до бази даних з шаблону тощо. З іншого боку, це створювало додаткову залежність у проектах, збільшувало їхню складність і вимагало від програмістів вивчення нової мови Smarty. Такі переваги були суперечливими, і для шаблонів продовжували використовувати звичайний PHP. + +З часом шаблонні системи почали ставати корисними. Вони запровадили такі поняття, як [успадкування |template-inheritance], [режим |sandbox] пісочниці та низку інших функцій, які значно спростили створення шаблонів порівняно з чистим PHP. Тема безпеки, існування [вразливостей на кшталт XSS |safety-first] та необхідності [ескейпінгу |#What is escaping] вийшла на перший план. Шаблонні системи запровадили автоматичне екранування, щоб усунути ризик того, що програміст забуде про нього і створить серйозну діру в безпеці (незабаром ми побачимо, що це має певні підводні камені). + +Сьогодні переваги шаблонних систем значно перевищують витрати, пов'язані з їх розгортанням. Тому є сенс їх використовувати. + + +Чому Latte краще, ніж Twig або Blade? .[#toc-why-is-latte-better-than-twig-or-blade] +------------------------------------------------------------------------------------ + +Є кілька причин - деякі з них приємні, а інші надзвичайно корисні. Латте - це поєднання приємного та корисного. + +*По-перше, приємне:* Latte має такий самий [синтаксис, як і PHP |syntax#Latte Understands PHP]. Єдина відмінність полягає в позначенні тегів, надаючи перевагу більш коротким `{` і `}` замість ``. Це означає, що вам не доведеться вчити нову мову. Витрати на навчання мінімальні. Найголовніше, що під час розробки вам не доведеться постійно "перемикатися" між мовою PHP і мовою шаблонів, оскільки вони обидві однакові. Це відрізняється від шаблонів Twig, які використовують мову Python, що змушує програміста перемикатися між двома різними мовами. + +*А тепер з надзвичайно корисної причини:* Всі системи шаблонів, такі як Twig, Blade або Smarty, еволюціонували, щоб включити захист від XSS у вигляді автоматичного [ескейпінгу |#What is escaping]. Точніше, автоматичного виклику функції `htmlspecialchars()`. Однак творці Latte зрозуміли, що це зовсім не правильне рішення. Це пов'язано з тим, що різні частини документа вимагають різних методів екранування. Наївне автоматичне екранування є небезпечною функцією, оскільки створює хибне відчуття безпеки. + +Щоб автоматичне екранування було функціональним і надійним, воно повинно розпізнавати, де в документі виводяться дані (ми називаємо це контекстами), і відповідно до цього вибирати функцію екранування. Отже, вона має бути [контекстно-чутливою |safety-first#Context-Aware Escaping]. І це те, що Latte може робити. Він розуміє HTML. Він не сприймає шаблон як просто рядок символів, а розуміє, що таке теги, атрибути тощо. Тому він по-різному виконує екранування в HTML-тексті, всередині HTML-тегів, всередині JavaScript тощо. + +Latte - це перша і єдина система шаблонів PHP з контекстно-залежним екрануванням. Це єдина справді безпечна система шаблонів. + +*І ще одна приємна причина:* Оскільки Latte розуміє HTML, вона пропонує інші дуже приємні можливості. Наприклад, [n:attributes |syntax#n:attributes]. Або можливість перевіряти [посилання |safety-first#Link checking]. І багато інших. + + +Що таке втеча? .[#toc-what-is-escaping] +--------------------------------------- + +Екранування - це процес, який передбачає заміну символів зі спеціальним значенням на відповідні послідовності при вставці одного рядка в інший, щоб запобігти небажаним ефектам або помилкам. Наприклад, при вставці рядка в HTML-текст, в якому символ `<` має особливе значення, оскільки вказує на початок тега, ми замінюємо його на відповідну послідовність, яка є HTML-об'єктом `<`. Це дозволяє браузеру коректно відображати символ `<`. + +Простим прикладом екранування безпосередньо при написанні PHP-коду є вставка лапок в рядок шляхом розміщення перед ними зворотної косої риски. + +Більш детально екранування обговорюється в розділі [Як захиститися від XSS |safety-first#How to Defend Against XSS?]. + + +Чи можна виконати запит до бази даних з шаблону Latte? .[#toc-can-a-database-query-be-executed-from-a-latte-template] +--------------------------------------------------------------------------------------------------------------------- + +У шаблонах можна працювати з об'єктами, які їм передає програміст. Якщо програміст хоче, він може передати шаблону об'єкт бази даних і виконати запит. Якщо він має намір це зробити, немає жодних причин перешкоджати йому. + +Інша ситуація виникає, якщо ви хочете надати клієнтам або зовнішнім програмістам можливість редагувати шаблони. У цьому випадку ви точно не хочете, щоб вони мали доступ до бази даних. Звичайно, ви не будете передавати об'єкт бази даних в шаблон, але що, якщо до неї можна отримати доступ через інший об'єкт? Рішенням є [режим |sandbox] пісочниці, який дозволяє вам визначати, які методи можна викликати в шаблонах. Завдяки цьому ви можете не турбуватися про порушення безпеки. + + +Які основні відмінності між системами шаблонів Latte, Twig та Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade] +--------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Відмінності між такими системами шаблонів, як Latte, Twig і Blade, полягають, головним чином, у їхньому синтаксисі, безпеці та інтеграції з фреймворками: + +- Latte: використовує синтаксис мови PHP, що робить її простішою у вивченні та використанні. Він забезпечує першокласний захист від XSS-атак. +- Twig: використовує Python-подібний синтаксис, який суттєво відрізняється від PHP. Він виконує ескейп без розрізнення контексту. Він добре інтегрований з фреймворком Symfony. +- Blade: використовує суміш PHP і власного синтаксису. Екранується без розрізнення контексту. Тісно інтегрована з функціями та екосистемою Laravel. + + +Чи варто компаніям використовувати систему шаблонів? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system] +-------------------------------------------------------------------------------------------------------------------- + +По-перше, витрати, пов'язані з навчанням, використанням та загальними перевагами, суттєво відрізняються залежно від системи. Система шаблонів Latte, завдяки використанню синтаксису PHP, значно спрощує навчання для програмістів, які вже знайомі з цією мовою. Зазвичай програмісту достатньо кількох годин, щоб достатньою мірою ознайомитися з Latte, що зменшує витрати на навчання і прискорює освоєння технології та, що найголовніше, ефективність у щоденному використанні. + +Крім того, Latte забезпечує високий рівень захисту від XSS-уразливостей завдяки унікальній технології контекстно-залежного обходу. Цей захист має вирішальне значення для забезпечення безпеки веб-додатків і мінімізації ризику атак, які можуть загрожувати користувачам або даним компанії. Безпека веб-додатків також важлива для підтримки гарної репутації компанії. Проблеми з безпекою можуть призвести до втрати довіри з боку клієнтів і зашкодити репутації компанії на ринку. + +Використання Latte також знижує загальні витрати на розробку та підтримку, спрощуючи обидва процеси. Тому використання системи шаблонів, безумовно, того варте. + + +Чи впливає Latte на продуктивність веб-додатків? .[#toc-does-latte-affect-the-performance-of-web-applications] +-------------------------------------------------------------------------------------------------------------- + +Хоча шаблони Latte обробляються швидко, цей аспект не має особливого значення. Причина в тому, що синтаксичний аналіз файлів відбувається лише один раз під час першого відображення. Потім вони компілюються в PHP-код, зберігаються на диску і запускаються при кожному наступному запиті без необхідності перекомпіляції. + +Саме так це працює у виробничому середовищі. Під час розробки шаблони Latte перекомпілюються щоразу, коли змінюється їхній вміст, тому розробник завжди бачить поточну версію.