Pourquoi utiliser des templates ?
- Pourquoi devrais-je utiliser un système de templates en PHP ?
- Pourquoi Latte est-il meilleur que, par exemple, Twig ou Blade ?
- Qu'est-ce que l'échappement ?
- Peut-on exécuter une requête de base de données depuis un template en Latte ?
- Quelles sont les principales différences entre les systèmes de templates comme Latte, Twig et Blade ?
- Est-il rentable pour les entreprises d'utiliser un système de templates ?
- Latte affecte-t-il les performances des applications web ?
Pourquoi devrais-je utiliser un système de templates en PHP ?
Pourquoi utiliser un système de templates en PHP, alors que PHP est lui-même un langage de template ?
Commençons par résumer brièvement l'histoire de ce langage, qui est pleine de rebondissements intéressants. L'un des premiers langages de programmation utilisés pour générer des pages HTML était le langage C. Cependant, il s'est vite avéré que son utilisation à cette fin était peu pratique. Rasmus Lerdorf a donc créé PHP, qui facilitait la génération de HTML dynamique avec le langage C en backend. PHP a donc été initialement conçu comme un langage de template, mais au fil du temps, il a acquis d'autres fonctionnalités et est devenu un langage de programmation à part entière.
Pourtant, il fonctionne toujours aussi comme un langage de template. Un fichier PHP peut contenir une page HTML dans laquelle
des variables sont affichées à l'aide de <?= $foo ?>
, etc.
Dès les débuts de l'histoire de PHP, le système de templates Smarty a été créé, dont le but était de séparer strictement l'apparence (HTML/CSS) de la logique applicative. Il fournissait donc intentionnellement un langage plus limité que PHP lui-même, afin que le développeur ne puisse pas, par exemple, exécuter une requête de base de données depuis un template, etc. D'un autre côté, il représentait une dépendance supplémentaire dans les projets, augmentait leur complexité et les programmeurs devaient apprendre un nouveau langage Smarty. Un tel avantage était discutable et PHP simple continuait d'être utilisé pour les templates.
Au fil du temps, les systèmes de templates ont commencé à devenir utiles. Ils ont introduit le concept d'héritage, le mode sandbox et un certain nombre d'autres fonctionnalités qui ont considérablement simplifié la création de templates par rapport à PHP pur. Le sujet de la sécurité, l'existence de vulnérabilités comme XSS et la nécessité d'échappement sont passés au premier plan. Les systèmes de templates ont introduit l'auto-échappement pour éliminer le risque que le programmeur l'oublie et crée une faille de sécurité grave (nous verrons dans un instant que cela présente certains écueils).
Les avantages des systèmes de templates dépassent aujourd'hui largement les coûts associés à leur déploiement. C'est pourquoi il est judicieux de les utiliser.
Pourquoi Latte est-il meilleur que, par exemple, Twig ou Blade ?
Il y a plusieurs raisons – certaines sont agréables et d'autres fondamentalement utiles. Latte est une combinaison de l'agréable et de l'utile.
D'abord l'agréable : Latte a la même syntaxe que
PHP. Seule la notation des balises diffère, au lieu de <?=
et ?>
, il préfère les plus
courtes {
et }
. Cela signifie que vous n'avez pas besoin d'apprendre un nouveau langage. Les coûts de
formation sont minimes. Et surtout, pendant le développement, vous n'avez pas besoin de “basculer” constamment entre le
langage PHP et le langage de template, car ils sont tous les deux identiques. Contrairement aux templates Twig, qui utilisent la
syntaxe de Python, et le programmeur doit ainsi basculer entre deux langages différents.
Et maintenant la raison extrêmement utile : Tous les systèmes de templates, tels que Twig, Blade ou Smarty, ont
introduit au cours de leur évolution une protection contre XSS sous la forme d'un échappement automatique. Plus précisément, l'appel automatique de la fonction
htmlspecialchars()
. Cependant, les créateurs de Latte ont réalisé que ce n'était pas du tout la bonne solution.
Parce que l'échappement se fait de différentes manières à différents endroits du document. L'auto-échappement naïf est une
fonction dangereuse car il crée un faux sentiment de sécurité.
Pour que l'auto-échappement soit fonctionnel et fiable, il doit reconnaître où les données sont affichées dans le document (nous les appelons contextes) et choisir la fonction d'échappement en conséquence. Il doit donc être sensible au contexte. Et c'est exactement ce que fait Latte. Il comprend le HTML. Il ne perçoit pas le template uniquement comme une chaîne de caractères, mais comprend ce que sont les balises, les attributs, etc. Et c'est pourquoi il échappe différemment dans le texte HTML, différemment à l'intérieur d'une balise HTML, différemment à l'intérieur de JavaScript, etc.
Latte est le premier et le seul système de templates en PHP à disposer d'un échappement sensible au contexte. Il représente ainsi le seul système de templates vraiment sécurisé.
Et une autre raison agréable : Grâce au fait que Latte comprend le HTML, il offre d'autres fonctionnalités très agréables. Par exemple, les n:attributs. Ou la capacité de vérifier les liens. Et bien d'autres.
Qu'est-ce que l'échappement ?
L'échappement est le processus qui consiste à remplacer les caractères ayant une signification spéciale par des séquences
correspondantes lors de l'insertion d'une chaîne dans une autre, afin d'éviter des phénomènes indésirables ou des erreurs.
Par exemple, lorsque nous insérons une chaîne dans du texte HTML, où le caractère <
a une signification
spéciale car il marque le début d'une balise, nous le remplaçons par la séquence correspondante, qui est l'entité HTML
<
. Grâce à cela, le navigateur affichera correctement le symbole <
.
Un exemple simple d'échappement directement lors de l'écriture de code en PHP est l'insertion d'un guillemet dans une chaîne, où nous le faisons précéder d'une barre oblique inverse.
Nous discutons plus en détail de l'échappement dans le chapitre Comment se défendre contre XSS.
Peut-on exécuter une requête de base de données depuis un template en Latte ?
Dans les templates, il est possible de travailler avec des objets que le programmeur leur transmet. Si le programmeur le souhaite, il peut donc transmettre un objet de base de données au template et exécuter une requête dessus. S'il a une telle intention, il n'y a aucune raison de l'en empêcher.
Une situation différente se présente si vous souhaitez donner la possibilité d'éditer les templates aux clients ou aux codeurs externes. Dans ce cas, vous ne voulez certainement pas qu'ils aient accès à la base de données. Bien sûr, vous ne transmettrez pas l'objet de base de données au template, mais que se passe-t-il s'il est possible d'y accéder via un autre objet ? La solution est le mode sandbox, qui permet de définir quelles méthodes peuvent être appelées dans les templates. Grâce à cela, vous n'avez pas à craindre une violation de la sécurité.
Quelles sont les principales différences entre les systèmes de templates comme Latte, Twig et Blade ?
Les différences entre les systèmes de templates Latte, Twig et Blade résident principalement dans la syntaxe, la sécurité et la manière d'intégration dans les frameworks
- Latte : utilise la syntaxe du langage PHP, ce qui facilite l'apprentissage et l'utilisation. Il offre une protection de pointe contre les attaques XSS grâce à son échappement sensible au contexte.
- Twig : utilise une syntaxe inspirée de Python, qui diffère de PHP. Il échappe sans distinction de contexte. Il est bien intégré au framework Symfony.
- Blade : utilise un mélange de PHP et de sa propre syntaxe. Il échappe sans distinction de contexte. Il est étroitement intégré aux fonctions et à l'écosystème de Laravel.
Est-il rentable pour les entreprises d'utiliser un système de templates ?
Tout d'abord, les coûts associés à la formation, à l'utilisation et à l'avantage global varient considérablement selon le système. Le système de templates Latte, grâce à son utilisation de la syntaxe PHP, simplifie grandement l'apprentissage pour les programmeurs déjà familiarisés avec ce langage. Il faut généralement quelques heures pour qu'un programmeur se familiarise suffisamment avec Latte. Il réduit donc les coûts de formation. En même temps, il accélère l'adoption de la technologie et surtout l'efficacité de l'utilisation quotidienne.
De plus, Latte offre un haut niveau de protection contre la vulnérabilité XSS grâce à sa technologie unique d'échappement sensible au contexte. Cette protection est cruciale pour assurer la sécurité des applications web et minimiser le risque d'attaques qui pourraient menacer les utilisateurs ou les données de l'entreprise. La protection de la sécurité des applications web est également importante pour maintenir la bonne réputation de l'entreprise. Les problèmes de sécurité peuvent entraîner une perte de confiance de la part des clients et nuire à la réputation de l'entreprise sur le marché.
L'utilisation de Latte réduit également les coûts globaux de développement et de maintenance de l'application en facilitant les deux. L'utilisation d'un système de templates est donc clairement rentable.
Latte affecte-t-il les performances des applications web ?
Bien que les templates Latte soient traités rapidement, cet aspect n'a en fait pas d'importance. La raison en est que l'analyse des fichiers ne se produit qu'une seule fois lors du premier affichage. Ensuite, ils sont compilés en code PHP, stockés sur le disque et exécutés à chaque requête ultérieure, sans qu'il soit nécessaire d'effectuer une nouvelle compilation.
C'est ainsi que cela fonctionne dans un environnement de production. Pendant le développement, les templates Latte sont recompilés chaque fois que leur contenu est modifié, afin que le développeur voie toujours la version actuelle.