Найпоширенішою критичною вразливістю веб-сайтів є 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 має броньований бункер прямо під капотом. Він називається режимом пісочниці та ізолює шаблони з ненадійних джерел, які, наприклад, редагують самі користувачі. Він надає їм обмежений доступ до тегів, фільтрів, функцій, методів тощо. Як це працює?
Latte компілює шаблони в оптимальний PHP-код під час виконання. Тому він такий же швидкий, як якщо б ви писали чистий PHP. Скомпільований код зрозумілий, і його легко налагоджувати. При кожній зміні шаблону він, звичайно, перекомпілюється заново.
Ми розробляємо Latte понад 18 років — і ця цифра продовжує зростати! Бібліотеки, які ми надаємо, тому є дуже зрілими, стабільними та широко використовуваними. Їм довіряє низка світових корпорацій, і вони забезпечують роботу багатьох важливих веб-сайтів. Хто використовує та довіряє Latte?
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.