Najczęstszą krytyczną luką w zabezpieczeniach stron internetowych jest Cross-Site Scripting (XSS). Pozwala atakującemu wstrzyknąć złośliwy skrypt na stronę, który następnie jest uruchamiany w przeglądarce niczego nieświadomego użytkownika. Może modyfikować stronę, pozyskiwać poufne informacje, a nawet ukraść tożsamość użytkownika.
Systemy szablonów zawodzą w obronie przed XSS. Latte to jedyny system ze skuteczną obroną, dzięki tzw. kontekstowemu escapowaniu.
Kto chce mieć dobrze zabezpieczoną stronę internetową, używa Latte.
Quiz: Czy potrafisz obronić się przed luką XSS?
Źródło danych: Acunetix Web Vulnerability Report
Przykład automatycznego escapowania zmiennej $text
w kilku
różnych kontekstach (górny szablon można edytować):
{var $text = "O'Neill"} - w tekście: <span>{$text}</span> - w atrybucie: <span title={$text}></span> - w atrybucie bez cudzysłowów: <span title={$text}></span> - w JavaScript: <script>var = {$text}</script>
- w tekście: <span>O'Neill</span> - w atrybucie: <span title='O'Neill'></span> - w atrybucie bez cudzysłowów: <span title="O'Neill"></span> - w JavaScript: <script>var = "O'Neill"</script>
Nie przesadzamy. Naprawdę już znasz język Latte. Umiesz już w nim pisać wyrażenia. Pisze się je bowiem dokładnie tak samo jak w PHP. Dzięki temu nie musisz zastanawiać się, jak co napisać w Latte. Nie musisz szukać w dokumentacji. Nie musisz uczyć się kolejnego języka. Po prostu piszesz jak w PHP. Więcej o składni Latte
<ul>
{foreach $users as $user}
<li>{$user->name}</li>
{/foreach}
</ul>
{if $post->status === Status::Published}
Read post
{elseif count($posts) > 0}
See other posts
{/if}
{$product?->getDiscount()}
{$foo[0] + strlen($bar[Bar::Const])}
{array_filter($nums, fn($n) => $n < 100)}
Latte bazuje na PHP, podczas gdy Twig bazuje na Pythonie. Projektant w Latte
nie musi ciągle przełączać się między dwoma różnymi konwencjami. Na
przykład między for person in people
w szablonach a
foreach $people as $person
w PHP. Nie musi też myśleć o tym,
gdzie użyć {% %}
, a gdzie {{ }}
, ponieważ Latte ma
jeden ogranicznik {...}
.
Wypróbuj narzędzie do konwersji szablonów Twig na Latte.
<ul>
{foreach $foo->items as $item}
<li>{$item->name}</li>
{/foreach}
</ul>
<ul>
{% for item in foo.items %}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
Użytkownicy uwielbiają tę funkcję. Nazywamy ją
n:atrybuty. Każdy tag parzysty, taki jak {if} … {/if}
,
obejmujący element HTML, można zapisać jako jego atrybut n:if
.
Dzięki temu uzyskuje się bardzo oszczędny zapis. Atrybuty mogą mieć
również prefiks inner-
i tag-
, wtedy zachowanie
dotyczy odpowiednio wnętrza elementu lub otwierającego i zamykającego tagu
HTML. Więcej
o n-atrybutach
Z użyciem n:atrybutów:
<ul n:if="count($menu) > 1" class="menu">
<li n:foreach="$menu as $item">
<a n:tag-if="$item->href" href={$item->href}>
{$item->caption}
</a>
</li>
</ul>
To samo bez nich:
{if count($menu) > 1}
<ul class="menu">
{foreach $menu as $item}
<li>
{if $item->href}<a href={$item->href}>{/if}
{$item->caption}
{if $item->href}</a>{/if}
</li>
{/foreach}
</ul>
{/if}
Latte ma natywne wsparcie w NetBeans oraz doskonały plugin dla PhpStorm, który podpowiada tagi, filtry i kod PHP.
Bądź zawsze na bieżąco. Plugin dla Tracy na każdej stronie informuje, które szablony i jakie zmienne są renderowane.
Latte to system szablonów nowej generacji – rozumie język HTML. Tam, gdzie inne systemy widzą tylko stos znaków, Latte widzi elementy HTML. Dlatego ma dwie niesamowite funkcje, takie jak kontekstowe escapowanie i n:atrybuty.
Jak szablon widzą Blade, Twig i inne systemy
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Jak szablon widzi Latte
<!DOCTYPE html>
<html>
<head>
<title>It's all about context</title>
<meta name="description" content={include description}>
</head>
<body>
<ul class="navigation">
{foreach $navigation as $item}
<li><a href={$item->link}>{$item->title}</a></li>
{/foreach}
</ul>
<script>
var appName = {$appName};
</script>
</body>
</html>
Zaawansowane mechanizmy ponownego użycia i dziedziczenia szablonów zwiększają produktywność, ponieważ każdy szablon zawiera tylko swoją unikalną treść, a powtarzające się elementy i struktury są ponownie wykorzystywane.
Latte ma pancerny bunkier tuż pod maską. Nazywa się go trybem sandbox i izoluje szablony z niezaufanych źródeł, na przykład te edytowane przez samych użytkowników. Zapewnia im ograniczony dostęp do tagów, filtrów, funkcji, metod itp. Jak to działa?
Latte kompiluje szablony w locie do optymalnego kodu PHP. Dzięki temu jest tak samo szybkie, jakbyś pisał czyste PHP. Skompilowany kod jest przejrzysty i można go łatwo debugować. Przy każdej zmianie szablonu jest on oczywiście ponownie kompilowany.
Rozwijamy Latte od ponad 18 lat – i liczba ta wciąż rośnie! Biblioteki, które dostarczamy, są zatem bardzo dojrzałe, stabilne i szeroko stosowane. Zaufało im wiele globalnych korporacji i napędzają one wiele znaczących stron internetowych. Kto używa i ufa Latte?
Latte to jedyny system szablonów, który ma całą dokumentację w języku polskim. Czytelnicy chwalą ją za zrozumiałość i aktualność. Życzymy miłej lektury.
Latte jest oprogramowaniem typu open source i można go używać całkowicie za darmo.