Proč používat šablony?
- Proč bych měl použít šablonovací systém v PHP?
- Proč je lepší Latte než třeba Twig nebo Blade?
- Co je to escapování?
- Lze v Latte provést dotaz do databáze ze šablony?
- Jaké jsou hlavní rozdíly mezi šablonovacími systémy jako Latte, Twig a Blade?
- Vyplatí se firmám používat šablonovací systém?
- Ovlivňuje Latte výkon webových aplikací?
Proč bych měl použít šablonovací systém v PHP?
Proč používat šablonovací systém v PHP, když je PHP samo o sobě šablonovací jazyk?
Pojďme si nejprve stručně zrekapitulovat historii tohoto jazyka, která je plná zajímavých zvratů. Jeden z prvních programovacích jazyků používaných pro generování HTML stránek byl jazyk C. Brzy se však ukázalo, že jeho použití pro tento účel je nepraktické. Rasmus Lerdorf proto vytvořil PHP, které usnadnilo generování dynamického HTML s jazykem C na backendu. PHP bylo tedy původně navrženo jako šablonovací jazyk, ale postupem času získalo další funkce a stalo se plnohodnotným programovacím jazykem.
Přesto stále funguje i jako šablonovací jazyk. V souboru PHP může být zapsaná HTML stránka, ve které se pomocí
<?= $foo ?>
vypisují proměnné atd.
Již v počátcích historie PHP vznikl šablonovací systém Smarty, jehož účelem bylo striktně oddělit vzhled (HTML/CSS) od aplikační logiky. Tedy záměrně poskytoval omezenější jazyk, než samotné PHP, aby vývojář nemohl například provést dotaz do databáze ze šablony apod. Na druhou stranu představoval další závislost v projektech, zvyšoval jejich složitost a programátoři se museli učit nový jazyk Smarty. Takový přínos byl sporný a nadále se pro šablony používalo prosté PHP.
V průběhu času se začaly šablonovací systémy stávat užitečnými. Přišly s konceptem dědičnosti, sandbox režimem 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 a nutnost 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. Liší se jen zápis značek, místo <?=
a ?>
preferuje kratší {
a
}
. To znamená, že se nemusíte učit nový jazyk. Náklady na zaškolení jsou minimální. A hlavně se při
vývoji nemusíte neustále „přepínat“ mezi jazykem PHP a jazykem šablony, jelikož jsou oba stejné. Na rozdíl od šablon
Twig, které používají jazyk Python, a programátor se tak musí přepínat mezi dvěma odlišnými jazyky.
A nyní důvod nesmírně užitečný: Všechny šablonovací systémy, jako Twig, Blade nebo Smarty, přišly
v průběhu evoluce s ochranou proti XSS v podobě automatického escapování.
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í. 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. Nebo schopnost kontrolovat odkazy. 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.
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, 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.