Найпоширенішою критичною уразливістю на веб-сайтах є міжсайтовий скриптинг (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'Ніл</span> - в атрибуті <span title='O'Neill'></span> - в атрибуті без лапок: <span title="O'Neill"></span> - в JavaScript: <script>var = "O'Neill"</script>
Ми не жартуємо, ви вже знаєте мову Latte. Ви вже знаєте, як писати вирази на ній. Насправді, вони пишуться точно так само, як і в PHP. Тому вам не потрібно думати про те, як писати речі на Latte. Вам не потрібно заглядати в документацію. Вам не потрібно вчити іншу мову. Ви просто пишете як на PHP. “Більше про синтаксис Latte .[more-about]:/uk/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 < 100)}
Latte базується на PHP, тоді як Twig – на Python.
Дизайнеру в Latte не потрібно постійно
перемикатися між двома різними
конвенціями. Наприклад, між
for person in people
в шаблонах і
foreach $people as $person
в PHP. Йому навіть не
потрібно думати про те, де використовувати
{% %}
, а де {{ }}
, тому що в Latte є
один роздільник {...}
.
Спробуйте інструмент “Twig to Latte tool:/uk/cookbook/migration-from-twig”.
<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}
{if} ... {/if}
можуть бути записані як його
n:if
. Це дуже ефективний спосіб запису.
Атрибути також можуть мати префікси
inner-
і tag-
, тоді поведінка
застосовується до внутрішньої частини
елемента відповідно до початкового і
кінцевого тегів HTML. “Більше про n-атрибути
.[more-about]:/uk/syntax#toc-n-atributy”
Використання n:attributes:
<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-код.
Залишайтеся на зв'язку. Плагін для Трейсі інформує вас на кожній сторінці про те, які шаблони і які змінні рендерингуються.
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. Скомпільований PHP-код зрозумілий і простий у налагодженні. Шаблон автоматично перекомпілюється щоразу, коли ми змінюємо вихідний файл.
Ми розробляємо Latte вже більше 18 років – і це ще не кінець! Тому бібліотеки, які ми надаємо, є дуже зрілими, стабільними та широко використовуваними. Їм довіряє низка світових корпорацій, і багато важливих веб-сайтів покладаються на нас. Хто використовує і довіряє Latte?
Читачі хвалять документацію за чіткість і повноту. Бажаємо вам приємного читання.
Latte має відкритий вихідний код і є повністю безкоштовним для використання.