Pourquoi utiliser des templates ?

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 fut le C. Il est cependant vite apparu que son usage à cette fin n'était guère pratique. Rasmus Lerdorf a donc créé PHP, qui facilitait la génération de HTML dynamique avec du C côté backend. PHP a été conçu à l'origine comme un langage de template, mais il a acquis au fil du temps d'autres fonctionnalités et est devenu un langage de programmation à part entière.

Il n'en reste pas moins qu'il fonctionne toujours comme un langage de template. Un fichier PHP peut contenir une page HTML dans laquelle les variables sont affichées à l'aide de <?= $foo ?>, etc.

Dès les débuts de PHP est né le système de templates Smarty, dont le but était de séparer strictement la présentation (HTML/CSS) de la logique applicative. Il offrait délibérément un langage plus limité que PHP lui-même, afin qu'un développeur ne puisse pas, par exemple, exécuter une requête de base de données depuis un template. En revanche, il représentait une dépendance supplémentaire dans les projets, augmentait leur complexité et obligeait les programmeurs à apprendre le nouveau langage Smarty. De tels avantages étaient discutables et le PHP nu a continué à servir pour les templates.

Au fil du temps, les systèmes de templates ont commencé à devenir utiles. Ils ont introduit des concepts comme l'héritage, le mode sandbox et bien d'autres fonctionnalités qui simplifiaient nettement la création de templates par rapport au PHP pur. Le sujet de la sécurité, l'existence de vulnérabilités comme XSS et la nécessité de l'échappement sont passés au premier plan. Les systèmes de templates ont introduit l'auto-échappement pour éliminer le risque qu'un programmeur l'oublie et crée une grave faille de sécurité (nous verrons dans un instant que cela comporte certains écueils).

Aujourd'hui, les avantages des systèmes de templates dépassent largement les coûts liés à leur déploiement. Il est donc judicieux de les utiliser.

Pourquoi Latte est-il meilleur que Twig ou Blade ?

Il y a plusieurs raisons : certaines sont agréables, 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 : il préfère les plus courtes { et } à <?= et ?>. Vous n'avez donc pas besoin d'apprendre un nouveau langage. Les coûts de formation sont minimes. Et surtout, pendant le développement, vous n'avez pas à “basculer” en permanence entre le langage PHP et le langage de template, puisque les deux sont identiques. Contrairement aux templates Twig, qui utilisent une syntaxe proche de Python et obligent le programmeur à jongler entre deux langages différents.

Et maintenant la raison extrêmement utile : tous les systèmes de templates, comme Twig, Blade ou Smarty, ont fini par intégrer une protection contre XSS sous la forme d'un échappement automatique. Plus précisément, l'appel automatique de la fonction htmlspecialchars(). Les créateurs de Latte ont cependant compris que ce n'était pas du tout la bonne solution, car les différentes parties du document exigent des méthodes d'échappement différentes. L'auto-échappement naïf est une fonctionnalité dangereuse, parce qu'il crée un faux sentiment de sécurité.

Pour que l'auto-échappement soit fonctionnel et fiable, il doit reconnaître à quel endroit du document les données sont affichées (nous appelons ces endroits des contextes) et choisir la fonction d'échappement en conséquence. Il doit donc être sensible au contexte. Et c'est précisément ce que Latte sait faire. Il comprend le HTML. Il ne voit pas le template comme une simple suite de caractères, mais sait ce que sont les balises, les attributs, etc. Il échappe donc différemment dans le texte HTML, à l'intérieur d'une balise HTML, à l'intérieur de JavaScript, etc.

Latte est le premier et le seul système de templates PHP doté d'un échappement sensible au contexte. Il constitue donc le seul système de templates réellement sûr.

Et encore une raison agréable : parce que Latte comprend le HTML, il offre d'autres fonctionnalités très plaisantes. Par exemple les n:attributs. Ou la possibilité de vérifier les liens. Et bien d'autres encore.

Qu'est-ce que l'échappement ?

L'échappement est le procédé qui consiste à remplacer les caractères ayant une signification particulière par les séquences correspondantes lorsqu'on insère une chaîne dans une autre, afin d'éviter des effets 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 particulière (il marque le début d'une balise), nous le remplaçons par la séquence correspondante, à savoir l'entité HTML &lt;. Le navigateur peut ainsi afficher correctement le symbole <.

Un exemple simple d'échappement lors de l'écriture même du code PHP est l'insertion d'un guillemet dans une chaîne, où nous le faisons précéder d'une barre oblique inverse.

Nous traitons l'échappement plus en détail dans le chapitre Comment se défendre contre XSS.

Peut-on exécuter une requête de base de données depuis un template Latte ?

Dans les templates, vous pouvez travailler avec les objets que le programmeur leur transmet. Si le programmeur le souhaite, il peut donc passer un objet de base de données au template et y exécuter une requête. Si telle est son intention, il n'y a aucune raison de l'en empêcher.

La situation est différente si vous voulez donner à des clients ou à des codeurs externes la possibilité de modifier les templates. Dans ce cas, vous ne voulez surtout pas qu'ils aient accès à la base de données. Bien sûr, vous ne passerez pas l'objet de base de données au template, mais que se passe-t-il s'il est accessible 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. Vous n'avez ainsi pas à craindre de brèche de 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 comme Latte, Twig et Blade tiennent surtout à leur syntaxe, à leur sécurité et à leur intégration aux frameworks :

  • Latte : utilise la syntaxe de PHP, ce qui le rend facile à apprendre et à utiliser. Offre une protection de premier ordre contre les attaques XSS grâce à l'échappement sensible au contexte. Bien intégré au Nette Framework, mais utilisable de façon autonome.
  • Twig : utilise une syntaxe proche de Python, très différente de PHP. Échappe sans distinction de contexte (simple htmlspecialchars). Bien intégré au framework Symfony.
  • Blade : utilise un mélange de PHP et de sa propre syntaxe. Échappe sans distinction de contexte (simple htmlspecialchars). Étroitement intégré aux fonctionnalités 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 de formation et d'utilisation, comme le bénéfice global, varient considérablement d'un système à l'autre. Le système de templates Latte, grâce à sa syntaxe PHP, simplifie grandement l'apprentissage pour les programmeurs qui connaissent déjà ce langage. Il suffit généralement de quelques heures pour qu'un programmeur maîtrise suffisamment Latte, ce qui réduit les coûts de formation et accélère l'adoption de la technologie et, surtout, l'efficacité au quotidien.

Latte offre en outre un haut niveau de protection contre les vulnérabilités XSS grâce à sa technologie unique d'échappement sensible au contexte. Cette protection est essentielle pour garantir la sécurité des applications web et minimiser le risque d'attaques susceptibles de menacer les utilisateurs ou les données de l'entreprise. La sécurité des applications web compte aussi pour préserver la réputation de l'entreprise. Un incident de sécurité peut entraîner une perte de confiance des clients et nuire à l'image de l'entreprise sur le marché.

L'usage de Latte réduit également les coûts globaux de développement et de maintenance en facilitant l'un comme l'autre. Utiliser un système de templates est donc assurément rentable.

Latte affecte-t-il les performances des applications web ?

Bien que les templates Latte soient traités rapidement, cet aspect n'a en réalité pas d'importance en production. La raison en est que les fichiers de template ne sont analysés qu'une seule fois, lors de leur premier affichage. Ils sont ensuite compilés en code PHP natif, stockés sur le disque et exécutés à chaque requête suivante sans nouvelle compilation.

C'est ainsi que cela se passe en environnement de production. Pendant le développement, les templates Latte sont recompilés dès que leur contenu change, si bien que le développeur voit toujours la version actuelle.

version: 3.x