Най-честата критична уязвимост на уебсайтовете е 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 е с отворен код и можете да го използвате напълно безплатно.
The first version of Latte 2 was released in 2014 as part of the then revolutionary splitting of the framework into a collection of standalone libraries. Version 3 of Latte, representing a major evolutionary leap was released just over a year ago.
How can you detect errors in templates in a timely manner? You have several methods at your disposal.