Най-често срещаната критична уязвимост в уебсайтовете е 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>О'Нийл</span> - в атрибут: <span title='O'Neill'></span> - в нецитиран атрибут: <span title="O'Neill"></span> - в JavaScript: <script>var = "O'Neill"</script>
Не се шегуваме, вие вече знаете езика на латето. Вече знаете как да пишете изрази на него. Всъщност те се пишат точно както в PHP. Така че не е нужно да мислите как да пишете нещата на Latte. Не е нужно да търсите в документацията. Не е нужно да учите друг език. Просто пишете като в PHP. “Повече за синтаксиса на Latte .[more-about]:/bg/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 < 10)}
Latte е базиран на PHP, а Twig – на Python.
Дизайнерът в Latte не трябва постоянно да
превключва между две различни конвенции.
Например, между for person in people
шаблоните и foreach $people as $person
в PHP. Той
дори не трябва да мисли къде да използва
{% %}
и къде {{ }}
, защото Latte има
един разделител {...}
.
Опитайте инструмента Twig to Latte tool.
<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:attributes. Всички
сдвоени тагове, като например
{if} ... {/if}
.. {if} ... {/if}
обвиващи HTML
елемент, могат да бъдат записани като негов
n:if
атрибут. Това дава възможност за
много ефективен запис. Атрибутите могат
също да имат префикси inner-
и
tag-
, тогава поведението се прилага
към вътрешността на елемента, съответно към
отварящия и завършващия HTML таг. “Повече за
n-атрибутите .[more-about]:/bg/syntax#toc-n-atributy”
Използване на 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:https://plugins.jetbrains.com/…n/7457-latte ", която предлага тагове, филтри и PHP код.
Останете във връзка. Плъгинът за Tracy ви информира на всяка страница кои шаблони и кои променливи се визуализират.
Latte е система за шаблониране от следващо поколение – тя разбира HTML. Когато другите системи виждат само куп символи, Latte вижда HTML елементи. Това е причината, поради която тя има две невероятни функции като контекстно-чувствително ескапиране и “n:атрибути:”/bg/syntax#toc-n-attributes.
Как 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 има брониран бункер под капака. Нарича се режим “пясъчник” и изолира шаблоните от ненадеждни източници, като например тези, редактирани от самите потребители. Той им дава ограничен достъп до тагове, филтри, функции, методи и т.н. Как работи това?
Latte компилира шаблона до оптималния PHP код едновременно с вашата работа. Така че е толкова бърз, колкото ако създавате само PHP. Компилираният PHP код е ясен и лесен за отстраняване на грешки. Шаблонът се прекомпилира автоматично всеки път, когато променим изходния файл.
Разработваме Latte вече повече от 15 години – и продължаваме да броим! Затова библиотеките, които предоставяме, са много зрели, стабилни и широко използвани. Те се ползват с доверието на редица световни корпорации и много значими уебсайтове разчитат на нас. Кой използва и се доверява на Latte?
Читателите хвалят документацията за яснота и пълнота. Пожелаваме ви приятно четене.
Latte е с отворен код и е напълно безплатен за използване.
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.
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.