Dlaczego używać szablonów?
- Dlaczego powinienem używać systemu szablonów w PHP?
- Dlaczego Latte jest lepsze niż Twig czy Blade?
- Czym jest escapowanie?
- Czy w Latte można wykonać zapytanie do bazy danych z szablonu?
- Jakie są główne różnice między systemami szablonów takimi jak Latte, Twig i Blade?
- Czy firmom opłaca się używać systemu szablonów?
- Czy Latte wpływa na wydajność aplikacji internetowych?
Dlaczego powinienem używać systemu szablonów w PHP?
Dlaczego używać systemu szablonów w PHP, skoro PHP samo w sobie jest językiem szablonów?
Najpierw krótko przypomnijmy sobie historię tego języka, która jest pełna interesujących zwrotów akcji. Jednym z pierwszych języków programowania używanych do generowania stron HTML był język C. Wkrótce jednak okazało się, że jego użycie do tego celu jest niepraktyczne. Rasmus Lerdorf stworzył więc PHP, które ułatwiło generowanie dynamicznego HTML z językiem C na backendzie. PHP było więc pierwotnie zaprojektowane jako język szablonów, ale z czasem zyskało dodatkowe funkcje i stało się pełnoprawnym językiem programowania.
Mimo to nadal działa również jako język szablonów. W pliku PHP może być zapisana strona HTML, w której za pomocą
<?= $foo ?>
wypisuje się zmienne itp.
Już 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. Czyli celowo dostarczał bardziej ograniczony język niż samo PHP, aby programista nie mógł na przykład wykonać zapytania do bazy danych z szablonu itp. Z drugiej strony stanowił dodatkową zależność w projektach, zwiększał ich złożoność, a programiści musieli uczyć się nowego języka Smarty. Taka korzyść była wątpliwa i nadal do szablonów używano zwykłego PHP.
Z biegiem czasu systemy szablonów zaczęły stawać się użyteczne. Przyniosły koncepcję dziedziczenia, trybu sandbox i szereg innych funkcji, które znacząco uprościły tworzenie szablonów w porównaniu do czystego PHP. Na pierwszy plan wysunął się temat bezpieczeństwa, istnienie podatności takich jak XSS i konieczność escapowania. Systemy szablonów wprowadziły autoescapowanie, aby zniknęło ryzyko, że programista o tym zapomni i powstanie poważna luka bezpieczeństwa (za chwilę pokażemy, że ma to pewne pułapki).
Korzyści płynące z systemów szablonów dzisiaj znacznie przewyższają koszty związane z ich wdrożeniem. Dlatego warto je stosować.
Dlaczego Latte jest lepsze niż Twig czy Blade?
Powodów jest kilka – niektóre są przyjemne, a inne zasadniczo użyteczne. Latte to połączenie przyjemnego z pożytecznym.
Najpierw to przyjemne: Latte ma tę samą składnię
co PHP. Różni się tylko zapis tagów, zamiast <?=
i ?>
preferuje krótsze {
i
}
. Oznacza to, że nie musisz uczyć się nowego języka. Koszty szkolenia są minimalne. A co najważniejsze,
podczas rozwoju nie musisz ciągle “przełączać się” między językiem PHP a językiem szablonu, ponieważ oba są takie
same. W przeciwieństwie do szablonów Twig, które używają języka Python, a programista musi przełączać się między dwoma
różnymi językami.
A teraz powód niezwykle użyteczny: Wszystkie systemy szablonów, takie jak Twig, Blade czy Smarty, w trakcie
ewolucji wprowadziły ochronę przed XSS w postaci automatycznego escapowania.
Dokładniej mówiąc, automatycznego wywoływania funkcji htmlspecialchars()
. Twórcy Latte zdali sobie jednak
sprawę, że to wcale nie jest właściwe rozwiązanie. Ponieważ w różnych miejscach dokumentu escapuje się na różne
sposoby. Naiwne autoescapowanie jest niebezpieczną funkcją, ponieważ tworzy fałszywe poczucie bezpieczeństwa.
Aby autoescapowanie było funkcjonalne i niezawodne, musi rozróżniać, w którym miejscu dokumentu dane są wypisywane (nazywamy je kontekstami) i zgodnie z nim wybierać funkcję escapującą. Czyli musi być kontekstowo-sensytywne. I to właśnie potrafi Latte. Rozumie HTML. Nie postrzega szablonu tylko jako ciągu znaków, ale rozumie, czym są tagi, atrybuty itp. Dlatego inaczej escapuje w tekście HTML, inaczej wewnątrz tagu HTML, inaczej wewnątrz JavaScriptu itd.
Latte jest pierwszym i jedynym systemem szablonów w PHP, który ma kontekstowo czułe escapowanie. Stanowi więc jedyny naprawdę bezpieczny system szablonów.
I jeszcze jeden przyjemny powód: Dzięki temu, że Latte rozumie HTML, oferuje inne bardzo przyjemne udogodnienia. Na przykład n:atrybuty. Lub zdolność kontrolowania linków. I wiele innych.
Czym jest escapowanie?
Escapowanie to proces polegający na zastępowaniu znaków o specjalnym znaczeniu odpowiednimi sekwencjami podczas wstawiania
jednego ciągu do drugiego, aby zapobiec niepożądanym zjawiskom lub błędom. Na przykład, gdy wstawiamy ciąg do tekstu HTML,
w którym znak <
ma specjalne znaczenie, ponieważ oznacza początek tagu, zastępujemy go odpowiednią
sekwencją, czyli encją HTML <
. Dzięki temu przeglądarka poprawnie wyświetli symbol <
.
Prostym przykładem escapowania bezpośrednio podczas pisania kodu w PHP jest wstawienie cudzysłowu do ciągu, przed którym piszemy odwrotny ukośnik.
Szczegółowiej escapowanie omawiamy w rozdziale Jak bronić się przed XSS.
Czy w Latte można wykonać zapytanie do bazy danych z szablonu?
W szablonach można pracować z obiektami, które programista do nich przekaże. Jeśli więc programista chce, może przekazać do szablonu obiekt bazy danych i na nim wykonać zapytanie. Jeśli ma taki zamiar, nie ma powodu mu w tym przeszkadzać.
Inna sytuacja ma miejsce, gdy chcesz dać możliwość edytowania szablonów klientom lub zewnętrznym koderom. W takim przypadku zdecydowanie nie chcesz, aby mieli dostęp do bazy danych. Oczywiście nie przekażesz szablonowi obiektu bazy danych, ale co jeśli można się do niej dostać przez inny obiekt? Rozwiązaniem jest tryb sandbox, który pozwala zdefiniować, które metody można wywoływać w szablonach. Dzięki temu nie musisz obawiać się naruszenia bezpieczeństwa.
Jakie są główne różnice między systemami szablonów takimi jak Latte, Twig i Blade?
Różnice między systemami szablonów Latte, Twig i Blade polegają głównie na składni, zabezpieczeniach i sposobie integracji z frameworkami
- Latte: używa składni języka PHP, co ułatwia naukę i używanie. Zapewnia najwyższą ochronę przed atakami XSS.
- Twig: używa składni języka Python, która znacznie różni się od PHP. Escapuje bez rozróżniania kontekstu. Jest dobrze zintegrowany z frameworkiem Symfony.
- Blade: używa mieszanki PHP i własnej składni. Escapuje bez rozróżniania kontekstu. Jest ściśle zintegrowany z funkcjami i ekosystemem Laravel.
Czy firmom opłaca się używać systemu szablonów?
Przede wszystkim koszty związane ze szkoleniem, użytkowaniem i ogólną korzyścią znacznie różnią się w zależności od systemu. System szablonów Latte, dzięki temu, że używa składni PHP, bardzo upraszcza naukę dla programistów już zaznajomionych z tym językiem. Zwykle zajmuje kilka godzin, zanim programista wystarczająco zapozna się z Latte. Zmniejsza więc koszty szkolenia. Jednocześnie przyspiesza przyswajanie technologii i przede wszystkim efektywność w codziennym użytkowaniu.
Ponadto Latte zapewnia wysoki poziom ochrony przed podatnością XSS dzięki unikalnej technologii kontekstowo czułego escapowania. Ta ochrona jest kluczowa dla zapewnienia bezpieczeństwa aplikacji internetowych i minimalizacji ryzyka ataków, które mogłyby zagrozić użytkownikom lub danym firmowym. Ochrona bezpieczeństwa aplikacji internetowych jest ważna również dla utrzymania dobrej reputacji firmy. Problemy z bezpieczeństwem mogą spowodować utratę zaufania ze strony klientów i zaszkodzić reputacji firmy na rynku.
Użycie Latte zmniejsza również całkowite koszty rozwoju i utrzymania aplikacji, ułatwiając oba te procesy. Użycie systemu szablonów jest więc jednoznacznie opłacalne.
Czy Latte wpływa na wydajność aplikacji internetowych?
Chociaż szablony Latte są przetwarzane szybko, ten aspekt właściwie nie ma znaczenia. Powodem jest to, że parsowanie plików odbywa się tylko raz przy pierwszym wyświetleniu. Następnie są kompilowane do kodu PHP, zapisywane na dysku i uruchamiane przy każdym kolejnym żądaniu, bez konieczności ponownej kompilacji.
Tak działa to w środowisku produkcyjnym. Podczas rozwoju szablony Latte są rekompilowane za każdym razem, gdy ich zawartość ulegnie zmianie, aby programista widział zawsze aktualną postać.