Найпоширенішою критичною вразливістю веб-сайтів є 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 — це проект з відкритим кодом, і ви можете використовувати його абсолютно безкоштовно.