Най-честата критична уязвимост на уебсайтовете е Cross-Site Scripting (XSS). Тя позволява на атакуващия да вмъкне злонамерен скрипт в чужда страница, който се изпълнява в браузъра на нищо неподозиращия потребител. Той може да промени страницата, да получи чувствителна информация или дори да открадне самоличността на потребителя.
Шаблониращите системи се провалят в защитата срещу XSS. Latte е единствената система с ефективна защита, благодарение на така нареченото контекстно-чувствително екраниране.
Всеки, който иска добре защитен уебсайт, използва Latte.
Тест: можете ли да се защитите от XSS уязвимост?
Източник на данни: Acunetix Web Vulnerability Report
Пример за автоматично екраниране на
променливата $text
в няколко различни
контекста (можете да редактирате горния
шаблон):
{var $text = "O'Neill"} - в текст: <span>{$text}</span> - в атрибут: <span title={$text}></span> - в атрибут без кавички: <span title={$text}></span> - в JavaScript: <script>var = {$text}</script>
- в текст: <span>O'Neill</span> - в атрибут: <span title='O'Neill'></span> - в атрибут без кавички: <span title="O'Neill"></span> - в JavaScript: <script>var = "O'Neill"</script>
Не преувеличаваме. Наистина вече познавате езика Latte. Вече знаете как да пишете изрази в него. Всъщност те се пишат точно както в PHP. Така че не е нужно да мислите как да пишете нещата в Latte. Не е нужно да търсите в документацията. Не е нужно да учите друг език. Просто пишете както в PHP. Повече за синтаксиса на 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 се базира на PHP, докато Twig се базира на
Python. Дизайнерът в Latte не трябва постоянно да
превключва между две различни конвенции.
Например, между for person in people
в
шаблоните и foreach $people as $person
в PHP. Дори
не е нужно да мисли къде да използва
{% %}
и къде {{ }}
, защото Latte има
един разделител {...}
.
Опитайте инструмента за преобразуване на Twig шаблони в 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>
Потребителите обожават тази
функция. Наричаме я n:атрибути. Всеки
сдвоен таг, като например {if} ... {/if}
,
обгръщащ HTML елемент, може да бъде записан
като негов n:if
атрибут. Това прави
нотацията много ефективна. Атрибутите
могат да имат и префикси inner-
и
tag-
, тогава поведението се прилага
съответно към вътрешността на елемента или
към отварящия и затварящия HTML таг. Повече за
n-атрибутите
С използване на n:атрибути:
<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>
Същото без тях:
{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 има нативна поддръжка в NetBeans и отличен плъгин за PhpStorm, който подсказва тагове, филтри и PHP код.
Бъдете винаги информирани. Плъгинът за Tracy информира на всяка страница кои шаблони и кои променливи се рендират.
Latte е шаблонираща система от ново поколение – тя разбира HTML езика. Там, където други системи виждат само купчина символи, Latte вижда HTML елементи. Ето защо тя има две невероятни функции като контекстно-чувствително екраниране и n:атрибути.
Как Blade, Twig и други системи виждат шаблона
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Как 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>
Усъвършенстваните механизми за повторно използване и наследяване на шаблони увеличават вашата производителност, тъй като всеки шаблон съдържа само своето уникално съдържание, а повтарящите се елементи и структури се използват повторно.
Latte има брониран бункер точно под капака. Нарича се sandbox режим и изолира шаблони от ненадеждни източници, които например се редактират от самите потребители. Предоставя им ограничен достъп до тагове, филтри, функции, методи и т.н. Как работи?
Latte компилира шаблоните в оптимален PHP код по време на изпълнение. Така че е толкова бързо, колкото ако пишете чисто PHP. Компилираният код е ясен и можете лесно да го дебъгвате. При всяка промяна на шаблона той, разбира се, се прекомпилира отново.
Разработваме Latte повече от 18 години – и броят им продължава да расте! Библиотеките, които предоставяме, са следователно много зрели, стабилни и широко използвани. Доверяват им се редица световни корпорации и много значими уебсайтове разчитат на нас. Кой използва и се доверява на Latte?
Читателите хвалят документацията за нейната разбираемост и пълнота. Желаем ви приятно четене.
Latte е с отворен код и можете да го използвате напълно безплатно.
How can you detect errors in templates in a timely manner? You have several methods at your disposal.
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.