Najczęstszą krytyczną luką w stronach internetowych jest Cross-Site Scripting (XSS). Pozwala ona atakującemu na wstawienie do strony złośliwego skryptu, który wykonuje się w przeglądarce niczego nie podejrzewającego użytkownika. Może on zmodyfikować stronę, uzyskać poufne informacje lub nawet ukraść tożsamość użytkownika.
Systemy templatkowania nie radzą sobie z obroną przed XSS. Latte jest jedynym systemem, który posiada skuteczną obronę, dzięki ucieczce kontekstowej.
Każdy, kto chce mieć dobrze zabezpieczoną stronę internetową, używa Latte.
Quiz: Czy potrafisz obronić się przed podatnością XSS?
Źródło: Acunetix Web Vulnerability Report
Przykład automatycznego uciekania zmiennej $text
w kilku
różnych kontekstach (można edytować górny szablon):
{var $text = "O'Neill"} - w tekście: <span>{$text}</span> - w atrybucie: <span title={$text}></span> - w nienotowanym atrybucie: <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 nienotowanym atrybucie: <span title="O'Neill"></span> - w JavaScript: <script>var = "O'Neill"</script>
Nie żartujemy, znasz już język latte. Wiesz już jak pisać w nim wyrażenia. W rzeczywistości są one napisane dokładnie tak samo jak w PHP. Nie musisz więc zastanawiać się, jak pisać rzeczy w Latte. Nie musisz szukać w dokumentacji. Nie musisz uczyć się innego języka. Po prostu piszesz tak jak w PHP. " Więcej o składni Latte .[more-about]":/pl/syntax
<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 jest oparty na PHP, podczas gdy Twig jest oparty 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
szablonach a
foreach $people as $person
w PHP. Nie musi nawet myśleć o tym,
gdzie użyć {% %}
, a gdzie {{ }}
, ponieważ Latte ma
jeden delimiter {.. {...}
{{ }}
.
Spróbuj narzędzia Twig do 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:attributes. Wszelkie sparowane znaczniki, takie jak
{if} ... {/if}
.. {if} ... {/if}
oplatające element
HTML mogą być zapisane jako jego atrybut n:if
. Jest to bardzo
wydajna notacja. Atrybuty mogą mieć także przedrostki inner-
i
tag-
, wtedy zachowanie dotyczy wnętrza elementu odpowiednio
otwierającego i kończącego znaczniki HTML. " Więcej o n-atrybutach
.[more-about]":/pl/syntax#toc-n-atributy
Używanie n:attributes:
<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>
And the Same Without Them:
{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 i doskonałą wtyczkę dla PhpStorm, która sugeruje tagi, filtry i kod PHP.
Pozostań w kontakcie. Wtyczka dla Tracy informuje Cię na każdej stronie, które szablony i które zmienne są renderowane.
Latte jest systemem szablonów nowej generacji – rozumie HTML. Tam gdzie inne systemy widzą tylko garść znaków, Latte widzi elementy HTML. To jest powód, dla którego posiada dwie niesamowite funkcje, takie jak context-sensitive escaping i n:attributes.
Jak Blade, Twig i inne systemy widzą szablon
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Jak Latte widzi szablon
<!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>
Wyrafinowane mechanizmy ponownego użycia i dziedziczenia szablonów zwiększają produktywność, ponieważ każdy szablon zawiera tylko swoją unikalną zawartość, a powtarzające się elementy i struktury są ponownie wykorzystywane.
Latte ma pancerny bunkier tuż pod maską. Nazywa się to trybem piaskownicy i izoluje szablony od niezaufanych źródeł, takich jak te edytowane przez samych użytkowników. Daje im ograniczony dostęp do tagów, filtrów, funkcji, metod itp. Jak to działa?
Latte kompiluje szablon do optymalnego kodu PHP w tym samym czasie, kiedy Ty pracujesz. Jest więc tak szybki, jakbyś tworzył wyłącznie w PHP. Skompilowany kod PHP jest przejrzysty i łatwy do debugowania. Szablon jest automatycznie rekompilowany za każdym razem, gdy zmieniamy plik źródłowy.
Rozwijamy Latte od ponad 18 lat – i nadal to robimy! Biblioteki, które dostarczamy są więc bardzo dojrzałe, stabilne i szeroko stosowane. Ufają im liczne globalne korporacje, a wiele znaczących stron internetowych polega na nas. Kto używa i ufa Latte?
Czytelnicy chwalą dokumentację za przejrzystość i kompletność. Życzymy przyjemnej lektury.
Latte jest open source i jest całkowicie darmowy.