La vulnerabilità critica più comune nei siti web è il Cross-Site Scripting (XSS). Permette a un aggressore di inserire uno script dannoso in una pagina che viene eseguito nel browser di un utente ignaro. Può modificare la pagina, ottenere informazioni sensibili o persino rubare l'identità dell'utente.
I sistemi di template falliscono nella difesa contro XSS. Latte è l'unico sistema con una difesa efficace, grazie all'escaping sensibile al contesto.
Chiunque voglia un sito web ben protetto usa Latte.
Quiz: puoi difenderti dalla vulnerabilità XSS?
Fonte dati: Acunetix Web Vulnerability Report
Esempio di escaping automatico della variabile $text
in diversi
contesti (puoi modificare il template sopra):
{var $text = "O'Neill"} - nel testo: <span>{$text}</span> - nell'attributo: <span title={$text}></span> - nell'attributo senza virgolette: <span title={$text}></span> - in JavaScript: <script>var = {$text}</script>
- nel testo: <span>O'Neill</span> - nell'attributo: <span title='O'Neill'></span> - nell'attributo senza virgolette: <span title="O'Neill"></span> - in JavaScript: <script>var = "O'Neill"</script>
Non stiamo scherzando. Conosci già il linguaggio Latte. Sai già come scrivere espressioni al suo interno. Infatti, si scrivono esattamente come in PHP. Quindi non devi pensare a come scrivere le cose in Latte. Non devi cercare nella documentazione. Non devi imparare un altro linguaggio. Scrivi semplicemente come in PHP. Maggiori informazioni sulla sintassi di 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 si basa su PHP, mentre Twig si basa su Python. Un designer in Latte non
deve passare costantemente tra due convenzioni diverse. Ad esempio, tra
for person in people
nei template e
foreach $people as $person
in PHP. Non deve nemmeno pensare a dove
usare {% %}
e dove usare {{ }}
, perché Latte ha un
solo delimitatore {...}
.
Prova lo strumento per convertire i template Twig in 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>
Gli utenti adorano questa funzionalità. La chiamiamo
n:attributes. Qualsiasi tag accoppiato, come
{if} ... {/if}
, che racchiude un elemento HTML può essere scritto
come suo attributo n:if
. Questo si traduce in una notazione molto
efficiente. Gli attributi possono anche avere prefissi inner-
e
tag-
, quindi il comportamento si applica rispettivamente
all'interno dell'elemento o ai tag HTML di apertura e chiusura. Maggiori informazioni sugli
n:attributes
Utilizzando gli 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>
E lo stesso senza di essi:
{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 ha supporto nativo in NetBeans e un eccellente plugin per PhpStorm che suggerisce tag, filtri e codice PHP.
Rimani sempre aggiornato. Il plugin per Tracy ti informa su ogni pagina quali template e quali variabili vengono resi.
Latte è un sistema di template di nuova generazione – comprende l'HTML. Dove altri sistemi vedono solo un mucchio di caratteri, Latte vede elementi HTML. Ecco perché ha due fantastiche funzionalità come l'escaping sensibile al contesto e gli n:attributes.
Come Blade, Twig e altri sistemi vedono il template
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Come Latte vede il template
<!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>
Meccanismi sofisticati per il riutilizzo e l'ereditarietà dei template aumentano la tua produttività, poiché ogni template contiene solo il suo contenuto unico e gli elementi e le strutture ripetute vengono riutilizzati.
Latte ha un bunker corazzato proprio sotto il cofano. Si chiama modalità sandbox e isola i template da fonti non attendibili, come quelli modificati dagli utenti stessi. Fornisce loro un accesso limitato a tag, filtri, funzioni, metodi, ecc. Come funziona?
Latte compila i template in codice PHP ottimale al volo. Quindi è veloce come se avessi scritto puro PHP. Il codice compilato è chiaro e facile da debuggare. Ovviamente, il template viene ricompilato automaticamente ogni volta che il file sorgente viene modificato.
Sviluppiamo Latte da oltre 18 anni – e continuiamo! Le librerie che forniamo sono quindi molto mature, stabili e ampiamente utilizzate. Sono affidabili per diverse aziende globali e alimentano molti siti web significativi. Chi usa e si fida di Latte?
Latte è un sistema di template ben documentato. I lettori elogiano la documentazione per chiarezza e completezza. Vi auguriamo una piacevole lettura.
Latte è open source e completamente gratuito da usare.