Nette Documentation Preview

syntax
Pourquoi utiliser des modèles ?
*******************************


Pourquoi utiliser un système de templates en PHP ? .[#toc-why-should-i-use-a-templating-system-in-php]
------------------------------------------------------------------------------------------------------

Pourquoi utiliser un système de modèles en PHP alors que PHP lui-même est un langage de création de modèles ?

Rappelons d'abord 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 est vite apparu que son utilisation à cette fin n'était pas pratique. Rasmus Lerdorf a donc créé PHP, qui permettait de générer des pages HTML dynamiques avec le langage C en arrière-plan. À l'origine, PHP était conçu comme un langage de création de modèles, mais au fil du temps, il a acquis des fonctionnalités supplémentaires et est devenu un langage de programmation à part entière.

Néanmoins, il fonctionne toujours comme un langage de création de modèles. Un fichier PHP peut contenir une page HTML, dans laquelle les variables sont affichées à l'aide de `<?= $foo ?>`etc.

Au début de l'histoire de PHP, le système de modèles Smarty a été créé dans le but de séparer strictement l'apparence (HTML/CSS) de la logique de l'application. Il a délibérément fourni un langage plus limité que PHP lui-même, de sorte que, par exemple, un développeur ne pouvait pas faire une requête de base de données à partir d'un modèle, etc. D'autre part, il représentait une dépendance supplémentaire dans les projets, augmentait leur complexité et obligeait les programmeurs à apprendre un nouveau langage Smarty. Ces avantages étaient controversés, et le PHP simple a continué à être utilisé pour les modèles.

Au fil du temps, les systèmes de modèles ont commencé à devenir utiles. Ils ont introduit des concepts tels que l'[héritage |template-inheritance], le [mode "bac à sable" |sandbox] et une série d'autres fonctionnalités qui ont considérablement simplifié la création de modèles par rapport au PHP pur. Le sujet de la sécurité, l'existence de [vulnérabilités telles que XSS |safety-first], et le besoin d'[échappement |#What is escaping] sont apparus sur le devant de la scène. Les systèmes de modèles ont introduit l'échappement automatique pour éliminer le risque qu'un programmeur l'oublie et crée une grave faille de sécurité (nous verrons bientôt que cela comporte certains pièges).

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


Pourquoi Latte est-il meilleur que Twig ou Blade ? .[#toc-why-is-latte-better-than-twig-or-blade]
-------------------------------------------------------------------------------------------------

Il y a plusieurs raisons - certaines sont agréables et d'autres sont immensément utiles. Latte est une combinaison d'agréable et d'utile.

*Tout d'abord, l'agréable:* Latte a la même [syntaxe que PHP |syntax#Latte Understands PHP]. La seule différence réside dans la notation des balises, qui préfère les balises courtes `{` et `}` à `<?=` et `?>`. Cela signifie que vous ne devez pas apprendre un nouveau langage. Les coûts de formation sont minimes. Plus important encore, pendant le développement, vous n'avez pas à "basculer" constamment entre le langage PHP et le langage des modèles, puisqu'il s'agit du même langage. Contrairement aux modèles Twig, qui utilisent le langage Python, le programmeur est obligé de passer d'un langage à l'autre.

*Tous les systèmes de templates, comme Twig, Blade ou Smarty, ont évolué pour inclure une protection contre les XSS sous la forme d'un [échappement |#What is escaping] 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. En effet, les différentes parties du document requièrent des méthodes d'échappement différentes. L'échappement automatique naïf est une fonction dangereuse car elle crée un faux sentiment de sécurité.

Pour que l'échappement automatique soit fonctionnel et fiable, il doit reconnaître à quel endroit du document les données sont émises (ce que nous appelons les contextes) et choisir la fonction d'échappement en conséquence. Il doit donc être [sensible au contexte |safety-first#Context-Aware Escaping]. Et c'est ce que Latte peut faire. Il comprend le langage HTML. Il ne perçoit pas le modèle comme une simple chaîne de caractères, mais comprend ce que sont les balises, les attributs, etc. Par conséquent, il échappe différemment dans le texte HTML, à l'intérieur des balises HTML, à l'intérieur de JavaScript, etc.

Latte est le premier et le seul système de gabarits PHP avec échappement contextuel. Il représente le seul système de modèles réellement sécurisé.

*Et une autre raison agréable:* Parce que Latte comprend le HTML, il offre d'autres fonctionnalités très agréables. Par exemple, [n:attributs |syntax#n:attributes]. Ou la possibilité de [vérifier les liens |safety-first#Link checking]. Et bien d'autres encore.


Qu'est-ce que l'échappement ? .[#toc-what-is-escaping]
------------------------------------------------------

L'échappement est un processus qui consiste à remplacer les caractères ayant une signification particulière par des séquences correspondantes lors de l'insertion d'une chaîne dans une autre afin d'éviter des effets indésirables ou des erreurs. Par exemple, lors de l'insertion d'une chaîne dans un texte HTML, dans laquelle le caractère `<` a une signification particulière car il indique le début d'une balise, nous le remplaçons par la séquence correspondante, qui est l'entité HTML `&lt;`. Cela permet au navigateur d'afficher correctement le symbole `<`.

Un exemple simple d'échappement direct lors de l'écriture du code PHP est l'insertion d'un guillemet dans une chaîne de caractères en plaçant une barre oblique inverse devant le guillemet.

Nous discutons de l'échappement plus en détail dans le chapitre [Comment se défendre contre les XSS |safety-first#How to Defend Against XSS?].


Une requête de base de données peut-elle être exécutée à partir d'un modèle Latte ? .[#toc-can-a-database-query-be-executed-from-a-latte-template]
--------------------------------------------------------------------------------------------------------------------------------------------------

Dans les modèles, vous pouvez travailler avec les objets que le programmeur leur transmet. Si le programmeur le souhaite, il peut transmettre un objet de base de données au modèle et exécuter une requête. S'il a l'intention de le faire, il n'y a aucune raison de l'en empêcher.

La situation est différente si vous souhaitez donner à des clients ou à des codeurs externes la possibilité de modifier les modèles. Dans ce cas, vous ne voulez absolument pas qu'ils aient accès à la base de données. Bien entendu, vous ne transmettrez pas l'objet base de données au modèle, mais qu'en est-il si un autre objet permet d'y accéder ? La solution est le [mode "bac à sable |sandbox]", qui vous permet de définir quelles méthodes peuvent être appelées dans les modèles. Grâce à cela, vous n'avez pas à vous soucier des failles de sécurité.


Quelles sont les principales différences entre les systèmes de templates tels que Latte, Twig et Blade ? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Les différences entre les systèmes de templating tels que Latte, Twig et Blade résident principalement dans leur syntaxe, leur sécurité et leur intégration avec les frameworks :

- Latte : utilise la syntaxe du langage PHP, ce qui facilite son apprentissage et son utilisation. Il offre une protection de premier ordre contre les attaques XSS.
- Twig : utilise une syntaxe semblable à celle de Python, qui est assez différente de celle de PHP. Il s'échappe sans distinction de contexte. Il est bien intégré au framework Symfony.
- Blade : utilise un mélange de PHP et de syntaxe personnalisée. Il s'échappe sans distinction de contexte. Il est étroitement intégré aux fonctionnalités et à l'écosystème de Laravel.


Cela vaut-il la peine pour les entreprises d'utiliser un système de templating ? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system]
------------------------------------------------------------------------------------------------------------------------------------------------

Tout d'abord, les coûts associés à la formation, à l'utilisation et aux avantages globaux varient considérablement en fonction du système. Le système de templates Latte, grâce à son utilisation de la syntaxe PHP, simplifie grandement l'apprentissage des programmeurs déjà familiarisés avec ce langage. Il suffit généralement de quelques heures pour qu'un programmeur se familiarise suffisamment avec Latte, ce qui réduit les coûts de formation et accélère l'adoption de la technologie et, surtout, l'efficacité dans l'utilisation quotidienne.

En outre, Latte offre un haut niveau de protection contre les vulnérabilités XSS grâce à sa technologie unique d'échappement contextuel. Cette protection est cruciale pour assurer la sécurité des applications web et minimiser le risque d'attaques qui pourraient mettre en danger les utilisateurs ou les données de l'entreprise. La sécurité des applications web est également importante pour maintenir la bonne réputation d'une 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 permet également de réduire les coûts globaux de développement et de maintenance en les facilitant. Par conséquent, l'utilisation d'un système de templates en vaut vraiment la peine.


Latte affecte-t-il les performances des applications web ? .[#toc-does-latte-affect-the-performance-of-web-applications]
------------------------------------------------------------------------------------------------------------------------

Bien que les modèles Latte soient traités rapidement, cet aspect n'a pas vraiment d'importance. En effet, l'analyse des fichiers n'a lieu qu'une seule fois lors du premier affichage. Ils sont ensuite compilés en code PHP, stockés sur le disque et exécutés à chaque demande ultérieure sans nécessiter de recompilation.

C'est ainsi que cela fonctionne dans un environnement de production. Pendant le développement, les modèles Latte sont recompilés chaque fois que leur contenu est modifié, de sorte que le développeur voit toujours la version actuelle.

Pourquoi utiliser des modèles ?

Pourquoi utiliser un système de templates en PHP ?

Pourquoi utiliser un système de modèles en PHP alors que PHP lui-même est un langage de création de modèles ?

Rappelons d'abord 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 est vite apparu que son utilisation à cette fin n'était pas pratique. Rasmus Lerdorf a donc créé PHP, qui permettait de générer des pages HTML dynamiques avec le langage C en arrière-plan. À l'origine, PHP était conçu comme un langage de création de modèles, mais au fil du temps, il a acquis des fonctionnalités supplémentaires et est devenu un langage de programmation à part entière.

Néanmoins, il fonctionne toujours comme un langage de création de modèles. Un fichier PHP peut contenir une page HTML, dans laquelle les variables sont affichées à l'aide de <?= $foo ?>etc.

Au début de l'histoire de PHP, le système de modèles Smarty a été créé dans le but de séparer strictement l'apparence (HTML/CSS) de la logique de l'application. Il a délibérément fourni un langage plus limité que PHP lui-même, de sorte que, par exemple, un développeur ne pouvait pas faire une requête de base de données à partir d'un modèle, etc. D'autre part, il représentait une dépendance supplémentaire dans les projets, augmentait leur complexité et obligeait les programmeurs à apprendre un nouveau langage Smarty. Ces avantages étaient controversés, et le PHP simple a continué à être utilisé pour les modèles.

Au fil du temps, les systèmes de modèles ont commencé à devenir utiles. Ils ont introduit des concepts tels que l'héritage, le mode „bac à sable“ et une série d'autres fonctionnalités qui ont considérablement simplifié la création de modèles par rapport au PHP pur. Le sujet de la sécurité, l'existence de vulnérabilités telles que XSS, et le besoin d'échappement sont apparus sur le devant de la scène. Les systèmes de modèles ont introduit l'échappement automatique pour éliminer le risque qu'un programmeur l'oublie et crée une grave faille de sécurité (nous verrons bientôt que cela comporte certains pièges).

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

Pourquoi Latte est-il meilleur que Twig ou Blade ?

Il y a plusieurs raisons – certaines sont agréables et d'autres sont immensément utiles. Latte est une combinaison d'agréable et d'utile.

Tout d'abord, l'agréable: Latte a la même syntaxe que PHP. La seule différence réside dans la notation des balises, qui préfère les balises courtes { et } à <?= et ?>. Cela signifie que vous ne devez pas apprendre un nouveau langage. Les coûts de formation sont minimes. Plus important encore, pendant le développement, vous n'avez pas à „basculer“ constamment entre le langage PHP et le langage des modèles, puisqu'il s'agit du même langage. Contrairement aux modèles Twig, qui utilisent le langage Python, le programmeur est obligé de passer d'un langage à l'autre.

*Tous les systèmes de templates, comme Twig, Blade ou Smarty, ont évolué pour inclure une protection contre les 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. En effet, les différentes parties du document requièrent des méthodes d'échappement différentes. L'échappement automatique naïf est une fonction dangereuse car elle crée un faux sentiment de sécurité.

Pour que l'échappement automatique soit fonctionnel et fiable, il doit reconnaître à quel endroit du document les données sont émises (ce que nous appelons les contextes) et choisir la fonction d'échappement en conséquence. Il doit donc être sensible au contexte. Et c'est ce que Latte peut faire. Il comprend le langage HTML. Il ne perçoit pas le modèle comme une simple chaîne de caractères, mais comprend ce que sont les balises, les attributs, etc. Par conséquent, il échappe différemment dans le texte HTML, à l'intérieur des balises HTML, à l'intérieur de JavaScript, etc.

Latte est le premier et le seul système de gabarits PHP avec échappement contextuel. Il représente le seul système de modèles réellement sécurisé.

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

Qu'est-ce que l'échappement ?

L'échappement est un processus qui consiste à remplacer les caractères ayant une signification particulière par des séquences correspondantes lors de l'insertion d'une chaîne dans une autre afin d'éviter des effets indésirables ou des erreurs. Par exemple, lors de l'insertion d'une chaîne dans un texte HTML, dans laquelle le caractère < a une signification particulière car il indique le début d'une balise, nous le remplaçons par la séquence correspondante, qui est l'entité HTML &lt;. Cela permet au navigateur d'afficher correctement le symbole <.

Un exemple simple d'échappement direct lors de l'écriture du code PHP est l'insertion d'un guillemet dans une chaîne de caractères en plaçant une barre oblique inverse devant le guillemet.

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

Une requête de base de données peut-elle être exécutée à partir d'un modèle Latte ?

Dans les modèles, vous pouvez travailler avec les objets que le programmeur leur transmet. Si le programmeur le souhaite, il peut transmettre un objet de base de données au modèle et exécuter une requête. S'il a l'intention de le faire, il n'y a aucune raison de l'en empêcher.

La situation est différente si vous souhaitez donner à des clients ou à des codeurs externes la possibilité de modifier les modèles. Dans ce cas, vous ne voulez absolument pas qu'ils aient accès à la base de données. Bien entendu, vous ne transmettrez pas l'objet base de données au modèle, mais qu'en est-il si un autre objet permet d'y accéder ? La solution est le mode „bac à sable“, qui vous permet de définir quelles méthodes peuvent être appelées dans les modèles. Grâce à cela, vous n'avez pas à vous soucier des failles de sécurité.

Quelles sont les principales différences entre les systèmes de templates tels que Latte, Twig et Blade ?

Les différences entre les systèmes de templating tels que Latte, Twig et Blade résident principalement dans leur syntaxe, leur sécurité et leur intégration avec les frameworks :

  • Latte : utilise la syntaxe du langage PHP, ce qui facilite son apprentissage et son utilisation. Il offre une protection de premier ordre contre les attaques XSS.
  • Twig : utilise une syntaxe semblable à celle de Python, qui est assez différente de celle de PHP. Il s'échappe sans distinction de contexte. Il est bien intégré au framework Symfony.
  • Blade : utilise un mélange de PHP et de syntaxe personnalisée. Il s'échappe sans distinction de contexte. Il est étroitement intégré aux fonctionnalités et à l'écosystème de Laravel.

Cela vaut-il la peine pour les entreprises d'utiliser un système de templating ?

Tout d'abord, les coûts associés à la formation, à l'utilisation et aux avantages globaux varient considérablement en fonction du système. Le système de templates Latte, grâce à son utilisation de la syntaxe PHP, simplifie grandement l'apprentissage des programmeurs déjà familiarisés avec ce langage. Il suffit généralement de quelques heures pour qu'un programmeur se familiarise suffisamment avec Latte, ce qui réduit les coûts de formation et accélère l'adoption de la technologie et, surtout, l'efficacité dans l'utilisation quotidienne.

En outre, Latte offre un haut niveau de protection contre les vulnérabilités XSS grâce à sa technologie unique d'échappement contextuel. Cette protection est cruciale pour assurer la sécurité des applications web et minimiser le risque d'attaques qui pourraient mettre en danger les utilisateurs ou les données de l'entreprise. La sécurité des applications web est également importante pour maintenir la bonne réputation d'une 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 permet également de réduire les coûts globaux de développement et de maintenance en les facilitant. Par conséquent, l'utilisation d'un système de templates en vaut vraiment la peine.

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

Bien que les modèles Latte soient traités rapidement, cet aspect n'a pas vraiment d'importance. En effet, l'analyse des fichiers n'a lieu qu'une seule fois lors du premier affichage. Ils sont ensuite compilés en code PHP, stockés sur le disque et exécutés à chaque demande ultérieure sans nécessiter de recompilation.

C'est ainsi que cela fonctionne dans un environnement de production. Pendant le développement, les modèles Latte sont recompilés chaque fois que leur contenu est modifié, de sorte que le développeur voit toujours la version actuelle.