- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Ce qu'on appelle l'échappement HTML automatique, c'est un mécanisme dans Django qui va permettre d'éviter certains types d'attaques.Pour résustrer tout ça, je vais vous montrer un exemple.
00:00:11 :Ici, dans ma vue, j'ai une variable que j'ai appelée var tout simplement,qui pourrait être par exemple le nom d'utilisateur ou n'importe quelle autre donnée qui est rentrée par l'utilisateur.
00:00:21 :C'est une variable que je ne définis pas moi-même, mais que je vais récupérer via les utilisateurs de ma plateforme, de mon site web.Ces données peuvent être potentiellement dangereuses.
00:00:32 :Je vais l'appeler name pour que ce soit plus clair ici, et je vais utiliser ça à l'intérieur de mon template.Si je veux afficher le nom de l'utilisateur, par exemple ici je vais faire un h1 et je vais dire salut, et on va mettre le nom de l'utilisateur.
00:00:47 :Le problème, c'est que là, imaginez que l'utilisateur ait rentré ça à la place de son nom,il va falloir que Django mette en place des mécanismes qui vont éviter que ce morceau de code ici, qui est du code HTML, soit exécuté.
00:01:02 :Puisque dans ce cas là, on a une balise script qui va exécuter du javascript.Ici, c'est juste un alerte, donc on fait juste afficher un pop-up et c'est complètement inoffensif,mais avec du javascript on peut faire des choses beaucoup plus dangereuses.
00:01:14 :Donc si on fait juste ça, si on met juste salut et qu'on met la variable name, vous allez voir que si je vais sur mon site et que j'actualise,là je retrouve le script qui est écrit directement.
00:01:24 :Donc on n'a pas le pop-up avec hello world qui s'affiche, et donc ça c'est parce que par défaut, depuis maintenant plusieurs versions,Django va faire cet échappement automatique de certains caractères qui sont assez dangereux.
00:01:36 :Donc là, on n'a pas l'impression qu'il a fait cet échappement, puisqu'on voit bien cette balise qui est affichée,mais en fait vous voyez qu'on n'a pas le javascript qui s'est exécuté, le pop-up n'est pas apparu.
00:01:45 :Et si on va voir le code source de la page, donc en faisant un clic droit view page source,on remarque en fait que la plupart des caractères à l'intérieur de cette phrase ici sont convertis.
00:01:55 :Donc on a ici l'esperluette avec lt qui signifie less than et le point virgule.Donc tout ça ici en fait, c'est juste une façon de remplacer le symbole ici plus petit que.
00:02:05 :Et on a la même chose avec le plus grand que, avec l'esperluette ici et le gt et le point virgule.Et on va avoir pareil avec les guillemets et avec d'autres symboles comme ça qui pourraient être problématiques.
00:02:17 :Donc finalement vous voyez que dans le html, le code n'est pas interprété.Il est remplacé par ses caractères spéciaux et ça évite ce genre d'attaque potentielle.
00:02:25 :Si par contre je viens ici et que je mets le filtre safe, là en fait je considère que ces données sont sécuritaires.Donc c'est là où il faut faire très attention puisque si vous mettez ce filtre safe,eh bien ça veut dire que tout ce qui est à l'intérieur de cette variable va être interprété.
00:02:40 :Donc je vais vous montrer ce que ça donne si j'actualise la page.Là vous voyez que j'ai bien le hello world qui s'affiche.Donc ça signifie que ma balise script a bien été comprise par ma page html et le script javascript est correctement exécuté.
00:02:53 :Donc c'est assez problématique puisqu'on pourrait avoir là encore du code beaucoup plus dangereux qu'un simple hello world qui s'affiche.Et là vous voyez qu'on n'a pas le script qui s'affiche.
00:03:02 :Donc c'est normal puisque quand on met une balise script avec du javascript à l'intérieur d'un fichier html,eh bien en temps normal ce script est exécuté et il n'est pas affiché.
00:03:11 :Donc là si je vais voir la page source, on voit ici que j'ai bien ma balise script avec le alert hello worldet là vous voyez que les caractères ne sont pas échappés.
00:03:19 :Donc on a vraiment le plus petit que, le plus grand que et les guillemetset c'est ça qui fait que quand on charge la page, eh bien ce script est exécuté.
00:03:26 :Donc vraiment faites très attention avec ça.Heureusement par défaut vous n'avez normalement pas vraiment besoin d'y penserpuisque automatiquement Django va échapper ces caractères.C'est vraiment quand vous utilisez ce filtre safe qu'il va falloir penser aux données,à comment vous récupérez ces données et si elles peuvent être potentiellement altérées
00:03:44 :ou même entrées par quelqu'un qui pourrait nuire à votre site.Donc si les utilisateurs peuvent rentrer des données, il faut faire très attention si vous utilisez ce filtre safe.
00:03:52 :Alors dans quel cas est-ce que ça peut servir ?Eh bien par exemple quand vous avez des balises html.Donc si je vais dans l'interface d'administration de ce site et que je vais voir les articles,vous allez voir que les articles ici contiennent plein de balises html de mise en forme
00:04:07 :et donc ces balises je vais vouloir les interpréter,je vais vouloir qu'elles soient comprises comme du code html et non pas comme du texte à afficher.
00:04:15 :Donc dans ce cas-ci si on souhaite afficher le contenu d'un article,eh bien là il va falloir afficher ce contenu avec le filtre safe.Donc je vais vous montrer ce que ça donne.
00:04:23 :Ici je veux boucler sur mes articles, donc je vais faire une bouclefor blog post in blog post puisque j'ai récupéré dans cette vue ici dans la vue d'index tous les articleset là c'est post et non pas blog post.
00:04:35 :Donc si je boucle sur tous ces articles et que je veux afficher le contenu de ces articles,eh bien là si je fais donc blog post point content et que je ne mets pas le safe,vous allez voir que si j'actualise, toutes les balises ici sont indiquées en tant que texte.
00:04:50 :Donc on n'a aucune mise en forme qui est effectuée.Donc là dans ce cas-ci vu que c'est des données que je rentre personnellement,ce n'est pas les utilisateurs qui vont écrire des articles de blog, c'est moi qui le fais,donc je peux m'assurer que je ne vais pas mettre des choses dangereuses à l'intérieur de ce contenu.
00:05:03 :Là si je mets le safe et que j'actualise, vous voyez qu'on a bien cette mise en forme.Si jamais vous avez besoin d'utiliser ce filtre safe à plusieurs endroits à l'intérieur d'une page,vous pouvez vous simplifier la vie et ne pas avoir à donc mettre ce filtre partout avec une balise
00:05:17 :qui est la balise auto escape et il faut la mettre à off.Donc vous dites en fait que vous enlevez l'échappement automatique du html.Donc on le met à off. Alors faites bien attention, ce n'est pas on ici, c'est off.
00:05:28 :On dit qu'on ne veut plus avoir l'échappement automatique de Django.Et ici on va fermer avec end auto escape.Et donc à l'intérieur de cette balise, à l'intérieur de ces deux balises ici,la balise du début et la balise de la fin, tout ce que vous mettez ici en fait ne sera pas échappé.
00:05:43 :Donc ça évite d'avoir à mettre le filtre safe sur toutes les variables qu'on aurait à l'intérieur ici.Donc si vous avez plusieurs éléments sur lesquels vous savez que vous avez besoin d'appliquer ce filtre safe,et bien vous pouvez vous sauver un peu de place en mettant ces balises ici.
00:05:55 :Là si je reviens et que j'actualise, vous voyez qu'on a bien le pop-up qui apparaîtpuisque le javascript est exécuté vu qu'on a mis le safe en fait sur le name.
00:06:03 :Donc le safe grâce à ce auto escape.Donc voilà pour cette petite partie très importante tout de même sur l'échappement automatique.Comme je vous dis, c'est quelque chose généralement sur lequel on n'a pas besoin de trop réfléchir au débutpuisque par défaut c'est fait comme il faut par Django, ça évite un grand nombre de problèmes.
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.