Miért használjunk sablonokat?
- Miért kellene sablonrendszert használnom PHP-ban?
- Miért jobb a Latte, mint például a Twig vagy a Blade?
- Mi az az escapelés?
- Lehet-e Latte-ban adatbázis-lekérdezést végrehajtani a sablonból?
- Melyek a fő különbségek a Latte, Twig és Blade sablonrendszerek között?
- Megéri-e a cégeknek sablonrendszert használni?
- Befolyásolja-e a Latte a webalkalmazások teljesítményét?
Miért kellene sablonrendszert használnom PHP-ban?
Miért használjunk sablonrendszert PHP-ban, ha a PHP maga is egy sablonnyelv?
Először is tekintsük át röviden ennek a nyelvnek a történetét, amely tele van érdekes fordulatokkal. Az egyik első programozási nyelv, amelyet HTML oldalak generálására használtak, a C nyelv volt. Hamarosan azonban kiderült, hogy erre a célra való használata nem praktikus. Rasmus Lerdorf ezért létrehozta a PHP-t, amely megkönnyítette a dinamikus HTML generálását C nyelvvel a háttérben. A PHP tehát eredetileg sablonnyelvként lett tervezve, de idővel további funkciókat kapott, és teljes értékű programozási nyelvvé vált.
Ennek ellenére továbbra is működik sablonnyelvként is. Egy PHP fájlban lehet egy HTML oldal, amelyben a
<?= $foo ?>
segítségével változókat íratunk ki stb.
Már a PHP történetének kezdetén létrejött a Smarty sablonrendszer, amelynek célja a megjelenés (HTML/CSS) és az alkalmazáslogika szigorú szétválasztása volt. Tehát szándékosan korlátozottabb nyelvet biztosított, mint maga a PHP, hogy a fejlesztő ne tudjon például adatbázis-lekérdezést végrehajtani a sablonból stb. Másrészt további függőséget jelentett a projektekben, növelte azok bonyolultságát, és a programozóknak meg kellett tanulniuk az új Smarty nyelvet. Ennek haszna vitatható volt, és továbbra is egyszerű PHP-t használtak a sablonokhoz.
Idővel a sablonrendszerek hasznossá váltak. Bevezették az öröklődés koncepcióját, a sandbox módot és számos más funkciót, amelyek jelentősen leegyszerűsítették a sablonok létrehozását a tiszta PHP-hoz képest. Előtérbe került a biztonság témája, a XSS-hez hasonló sebezhetőségek létezése és az escapelés szükségessége. A sablonrendszerek bevezették az automatikus escapelést, hogy eltűnjön annak a kockázata, hogy a programozó elfelejti ezt, és súlyos biztonsági rés keletkezik (hamarosan megmutatjuk, hogy ennek vannak bizonyos buktatói).
A sablonrendszerek előnyei ma már jelentősen meghaladják a bevezetésükkel járó költségeket. Ezért van értelme használni őket.
Miért jobb a Latte, mint például a Twig vagy a Blade?
Ennek több oka is van – némelyik kellemes, mások pedig alapvetően hasznosak. A Latte a kellemes és a hasznos kombinációja.
Először a kellemes: A Latte ugyanazt a szintaxist
használja, mint a PHP. Csak a tagek írásmódja különbözik, a <?=
és ?>
helyett a
rövidebb {
és }
-t részesíti előnyben. Ez azt jelenti, hogy nem kell új nyelvet tanulnia.
A betanulási költségek minimálisak. És főleg, a fejlesztés során nem kell folyamatosan “váltogatni” a PHP nyelv és
a sablonnyelv között, mivel mindkettő ugyanaz. Ellentétben a Twig sablonokkal, amelyek Python nyelvet használnak, és a
programozónak így két különböző nyelv között kell váltogatnia.
És most egy rendkívül hasznos ok: Minden sablonrendszer, mint a Twig, Blade vagy Smarty, az evolúció során
bevezette az XSS elleni védelmet automatikus escapelés formájában. Pontosabban az
htmlspecialchars()
függvény automatikus meghívását. A Latte alkotói azonban rájöttek, hogy ez egyáltalán
nem a helyes megoldás. Mivel a dokumentum különböző helyein különböző módon kell escapelni. A naiv automatikus
escapelés veszélyes funkció, mert hamis biztonságérzetet kelt.
Ahhoz, hogy az automatikus escapelés funkcionális és megbízható legyen, fel kell ismernie, hogy a dokumentum melyik részében íródnak ki az adatok (kontextusoknak nevezzük őket), és ennek megfelelően kell kiválasztania az escapelési funkciót. Tehát kontextus-érzékenynek kell lennie. És ezt a Latte tudja. Érti a HTML-t. Nem csak karakterláncként érzékeli a sablont, hanem érti, mik a tagek, attribútumok stb. És ezért másképp escapel a HTML szövegben, másképp a HTML tagen belül, másképp a JavaScripten belül stb.
A Latte az első és egyetlen PHP sablonrendszer, amely kontextus-érzékeny escapeléssel rendelkezik. Így az egyetlen igazán biztonságos sablonrendszert képviseli.
És még egy kellemes ok: Annak köszönhetően, hogy a Latte érti a HTML-t, további nagyon kellemes funkciókat kínál. Például az n:attribútumokat. Vagy a linkek ellenőrzésének képességét. És még sok mást.
Mi az az escapelés?
Az escapelés egy olyan folyamat, amely abból áll, hogy a speciális jelentéssel bíró karaktereket megfelelő
szekvenciákkal helyettesítjük, amikor egy karakterláncot egy másikba illesztünk, hogy elkerüljük a nemkívánatos
jelenségeket vagy hibákat. Például, amikor egy karakterláncot illesztünk be egy HTML szövegbe, amelyben a <
karakternek különleges jelentése van, mivel egy tag kezdetét jelöli, helyettesítjük a megfelelő szekvenciával, ami a
<
HTML entitás. Ennek köszönhetően a böngésző helyesen jeleníti meg a <
szimbólumot.
Az escapelés egyszerű példája közvetlenül a PHP kód írásakor az idézőjel beillesztése egy karakterláncba, amikor
elé egy fordított perjelet (\
) írunk.
Az escapelést részletesebben a Hogyan védekezzünk az XSS ellen fejezetben tárgyaljuk.
Lehet-e Latte-ban adatbázis-lekérdezést végrehajtani a sablonból?
A sablonokban olyan objektumokkal lehet dolgozni, amelyeket a programozó átad nekik. Ha tehát a programozó akarja, átadhatja az adatbázis objektumot a sablonnak, és azon lekérdezést hajthat végre. Ha ez a szándéka, nincs okunk megakadályozni ebben.
Más a helyzet, ha lehetőséget akarunk adni az ügyfeleknek vagy külső kódolóknak a sablonok szerkesztésére. Ebben az esetben határozottan nem akarjuk, hogy hozzáférjenek az adatbázishoz. Természetesen nem adjuk át az adatbázis objektumot a sablonnak, de mi van, ha egy másik objektumon keresztül hozzá lehet férni? A megoldás a sandbox mód, amely lehetővé teszi annak meghatározását, hogy mely metódusokat lehet meghívni a sablonokban. Ennek köszönhetően nem kell aggódnia a biztonság megsértése miatt.
Melyek a fő különbségek a Latte, Twig és Blade sablonrendszerek között?
A Latte, Twig és Blade sablonrendszerek közötti különbségek főként a szintaxisban, a biztonságban és a keretrendszerekbe való integráció módjában rejlenek.
- Latte: PHP nyelv szintaxisát használja, ami megkönnyíti a tanulást és a használatot. Csúcsminőségű védelmet nyújt az XSS támadások ellen a kontextus-érzékeny escapelés révén.
- Twig: Python nyelv szintaxisát használja, amely meglehetősen különbözik a PHP-tól. Kontextus megkülönböztetése nélkül escapel. Jól integrálódik a Symfony keretrendszerbe.
- Blade: PHP és saját szintaxis keverékét használja. Kontextus megkülönböztetése nélkül escapel. Szorosan integrálódik a Laravel funkciókhoz és ökoszisztémához.
Megéri-e a cégeknek sablonrendszert használni?
Először is, a betanulással, használattal és általános haszonnal járó költségek jelentősen eltérnek a rendszertől függően. A Latte sablonrendszer, mivel PHP szintaxist használ, nagyon leegyszerűsíti a tanulást a PHP-val már ismerős programozók számára. Általában néhány órába telik, amíg egy programozó kellőképpen megismeri a Latte-t. Csökkenti tehát a képzési költségeket. Ugyanakkor felgyorsítja a technológia elsajátítását és mindenekelőtt a hatékonyságot a mindennapi használat során.
Továbbá a Latte magas szintű védelmet nyújt az XSS sebezhetőséggel szemben az egyedülálló kontextus-érzékeny escapelési 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 támadások kockázatának minimalizálásához, amelyek veszélyeztethetnék a felhasználókat vagy a vállalati adatokat. A webalkalmazások biztonságának védelme fontos a cég jó hírnevének megőrzése szempontjából is. A biztonsági problémák az ügyfelek bizalmának elvesztését okozhatják, és károsíthatják a cég hírnevét a piacon.
A Latte használata csökkenti az alkalmazás fejlesztésének és karbantartásának általános költségeit is azáltal, hogy mindkettőt megkönnyíti. A sablonrendszer használata tehát egyértelműen megéri.
Befolyásolja-e a Latte a webalkalmazások teljesítményét?
Bár a Latte sablonok gyorsan feldolgozódnak, ez a szempont valójában nem számít. Ennek oka az, hogy a fájlok elemzése csak egyszer történik meg az első megjelenítéskor. Ezt követően PHP kódba fordítódnak, a lemezre mentődnek, és minden további kérésnél futtatódnak anélkül, hogy újrafordításra lenne szükség.
Ez a működési mód az éles környezetben. A fejlesztés során a Latte sablonok minden alkalommal újrafordítódnak, amikor a tartalmuk megváltozik, hogy a fejlesztő mindig az aktuális állapotot lássa.