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.
In the latest update of Latte, we are introducing several significant enhancements that will simplify and make more efficient the work with data in your templates. The new |group filter and the expanded capabilities of the |sort filter bring new possibilities for data presentation.