Наиболее распространенной критической уязвимостью сайтов является межсайтовый скриптинг (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 есть бронированный бункер прямо под капотом. Он называется режимом песочницы и изолирует шаблоны из ненадежных источников, которые, например, редактируют сами пользователи. Он предоставляет им ограниченный доступ к тегам, фильтрам, функциям, методам и т. д. Как это работает?
Latte компилирует шаблоны в оптимальный PHP-код во время выполнения. Так что он такой же быстрый, как если бы вы писали чистый PHP. Скомпилированный код понятен и его легко отлаживать. При каждом изменении шаблона он, конечно, перекомпилируется заново.
Мы разрабатываем Latte более 18 лет — и это число продолжает расти! Библиотеки, которые мы предоставляем, поэтому очень зрелые, стабильные и широко используемые. Им доверяют ряд глобальных корпораций, и на них работают многие крупные веб-сайты. Кто использует и доверяет Latte?
Latte — единственная шаблонная система, у которой вся документация на чешском языке. Читатели хвалят ее за понятность и актуальность. Желаем приятного чтения.
Latte является open source, и вы можете использовать его совершенно бесплатно.