Наиболее распространенной критической уязвимостью веб-сайтов является межсайтовый скриптинг (XSS). Она позволяет злоумышленнику вставить вредоносный скрипт в страницу, которая выполняется в браузере ничего не подозревающего пользователя. Он может изменить страницу, получить конфиденциальную информацию или даже украсть личность пользователя.
Системы шаблонизации не способны защитить от XSS. Latte – единственная система с эффективной защитой, благодаря контекстно-зависимому экранированию.
Каждый, кто хочет иметь хорошо защищенный сайт, использует Latte.
Викторина: Можете ли вы защититься от XSS-уязвимости?
Источник: Отчет о веб-уязвимостях Acunetix
Пример автоматического экранирования
переменной $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>
Мы не шутим, вы уже знаете язык 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 to 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:attributes. Любые парные теги, такие
как {if} ... {/if}
.. {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":/ru/develop#toc-debugging-and-tracy информирует вас на каждой странице о том, какие шаблоны и какие переменные отображаются.
Latte – это система шаблонов нового поколения – она понимает HTML. Там, где другие системы видят только набор символов, Latte видит HTML-элементы. Именно поэтому у нее есть такие удивительные возможности, как контекстно-зависимое экранирование и 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 уже более 18 лет – и не останавливаемся на достигнутом! Поэтому библиотеки, которые мы предоставляем, являются очень зрелыми, стабильными и широко используемыми. Им доверяют многие мировые корпорации, и многие значимые веб-сайты полагаются на нас. Кто использует и доверяет Latte?
Читатели хвалят документацию за ясность и полноту. Желаем вам приятного чтения.
Latte имеет открытый исходный код и совершенно бесплатен для использования.