La vulnérabilité critique la plus courante des sites web est le Cross-Site Scripting (XSS). Elle permet à un attaquant d'insérer un script malveillant dans une page qui s'exécute dans le navigateur d'un utilisateur peu méfiant. Il peut modifier la page, obtenir des informations sensibles ou même voler l'identité de l'utilisateur.
Les systèmes de templating ne parviennent pas à se défendre contre XSS. Latte est le seul système qui offre une défense efficace, grâce à l'échappement contextuel.
Tous ceux qui veulent un site Web bien sécurisé utilisent Latte.
Quiz : Pouvez-vous vous défendre contre la vulnérabilité XSS ?
Source : Rapport sur les vulnérabilités Web d'Acunetix
Exemple d'échappement automatique de la variable $text
dans
plusieurs contextes différents (vous pouvez modifier le modèle du haut) :
{var $text = "O'Neill"} - dans le texte : <span>{$text}</span> - dans l'attribut : <span title={$text}></span> - dans un attribut non cité : <span title={$text}></span> - dans JavaScript : <script>var = {$text}</script>
- dans le texte : <span>O'Neill</span> - dans l'attribut : <span title='O'Neill'></span> - dans l'attribut non cité : <span title="O'Neill"></span> - dans JavaScript : <script>var = "O'Neill"</script>
Nous ne plaisantons pas, vous connaissez déjà la langue Latte. Vous savez déjà comment écrire des expressions dans ce langage. En fait, elles sont écrites exactement comme en PHP. Vous n'avez donc pas à réfléchir à la façon d'écrire des choses en Latte. Vous n'avez pas besoin de consulter la documentation. Vous n'avez pas besoin d'apprendre un autre langage. Vous écrivez simplement comme en PHP. En savoir plus sur la syntaxe de 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 est basé sur PHP, alors que Twig est basé sur Python. Dans Latte, un
concepteur n'a pas à basculer constamment entre deux conventions différentes.
Par exemple, entre for person in people
in templates et
foreach $people as $person
en PHP. Il n'a même pas à se demander
où utiliser {% %}
et où utiliser {{ }}
, car Latte
n'a qu'un seul délimiteur {...}
.
Essayez l'outil 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>
Les utilisateurs adorent cette fonctionnalité. Nous l'appelons
n:attributes. Toutes les balises appariées, telles que
{if} ... {/if}
.. {if} ... {/if}
n:if
.
Cela donne une notation très efficace. Les attributs peuvent également avoir
des préfixes inner-
et tag-
, le comportement
s'applique alors à l'intérieur de l'élément, respectivement aux balises HTML
d'ouverture et de fin. En
savoir plus sur les n-attributs
Utiliser les n:attributs :
<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>
Et la même chose sans eux :
{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 a un support natif dans NetBeans et un excellent plugin pour PhpStorm qui propose des balises, des filtres et du code PHP.
Restez en contact. Le plugin pour Tracy vous informe sur chaque page des modèles et des variables qui sont rendus.
Latte est un système de modélisation de nouvelle génération – il comprend le HTML. Là où les autres systèmes ne voient qu'un tas de caractères, Latte voit les éléments HTML. C'est la raison pour laquelle il dispose de deux fonctions étonnantes comme l'échappement sensible au contexte et n:attributes.
Comment Blade, Twig et d'autres systèmes voient le modèle
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Comment Latte voit le modèle
<!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>
Les mécanismes sophistiqués de réutilisation et d'héritage des modèles augmentent votre productivité car chaque modèle ne contient que son contenu unique, et les éléments et structures répétés sont réutilisés.
Le Latte dispose d'un bunker blindé juste sous le capot. Il s'agit du mode sandbox, qui isole les modèles des sources non fiables, telles que celles éditées par les utilisateurs eux-mêmes. Il leur donne un accès limité aux balises, filtres, fonctions, méthodes, etc. Comment ça marche ?
Latte compile le modèle vers le code PHP optimal en même temps que vous travaillez. Il est donc aussi rapide que si vous créiez un code purement PHP. Le code PHP compilé est clair et facile à déboguer. Le modèle est automatiquement recompilé chaque fois que nous modifions le fichier source.
Nous développons Latte depuis plus de 18 ans – et ce n'est pas fini ! Les bibliothèques que nous fournissons sont donc très matures, stables et largement utilisées. De nombreuses entreprises mondiales leur font confiance et de nombreux sites Web importants comptent sur nous. Qui utilise Latte et lui fait confiance ?
Les lecteurs font l'éloge de la documentation pour sa clarté et son exhaustivité. Nous vous souhaitons une agréable lecture.
Latte est open source et son utilisation est totalement gratuite.
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.