Salut Ă tous đź‘‹et bienvenue dans le Point SĂ©cu avec Julio de SecuPress. Aujourd’hui, on va voir des fonctions de sĂ©curisation de WordPress.
Ca va être un petit peu plus technique, mais ne vous inquiétez pas Julio va vous expliquer ça comme il faut.
Allez c’est parti !
Sommaire
Alors Julio voilà on va faire une vidéo de code sans trop montrer de code, mais il y a un tous les morceaux de code en-dessous bien sûr.
Donc, qu’est-ce que tu peux nous expliquer un petit peu sur ces fonctions : Ă quoi elles servent, qu’est ce que tu peux nous expliquer ? En tout cas, ça s’adresse aux dĂ©veloppeurs de thèmes, de plugins.
>>Julio : exactement, donc c’est pour les dĂ©veloppeurs de thèmes et de plugins, pour autant il y a du code, mais avant de se lancer dans le code, il va falloir comprendre pourquoi est-ce qu’il faut utiliser telle ou telle fonction, Ă quoi ça sert.
Les nonces ou jetons de sécurité
On va parler de quelque chose dont vous avez dĂ©jĂ sĂ»rement tous entendu parler ou au moins lu quelque part c’est les “nonces” “number once” ce qui signifie un chiffre utilisĂ© une fois. On les appelle aussi en français des jetons de sĂ©curitĂ©.
Bon d’abord Ă quoi ça sert un jeton de sĂ©curitĂ© ? Ca sert Ă s’assurer que l’action qui est lancĂ©e, donc un formulaire ou un lien Ă cliquer est bien lancĂ©e par la personne et donc que la personne dĂ©sirait vraiment faire cette action.
Je prends un exemple :
Je n’ai pas de jetons de sĂ©curitĂ© sur un lien qui me permet de supprimer un article WordPress.
Donc j’ai le nom de mon site ?action = delete e id = 1
, ça veut dire que je vais supprimer l’article 1 donc ça c’est mon lien.
Si moi je suis un visiteur et que j’essaie de cliquer sur ce lien, on va me dire “vous n’avez pas les droits”, si je suis inscrit dans ce site, je clique, on va me dire “vous n’avez toujours pas les droits” !
Ben non, il faut ĂŞtre administrateur.
Maintenant je vais donner ce lien Ă un administrateur
>>Alex : tu l’envoies par email…
>>Julio : je l’envoie par email en disant “tiens regarde tu es en photo Ă cet endroit” je change le texte du lien pour pas qu’il voit exactement ce qui est Ă©crit.
En cliquant il va ouvrir la page sur son administration, qui va supprimer l’article, 1 puisqu’il est administrateur, il a les droits.
Qu’est-ce qui se passe : il vient de supprimer l’article 1, mince !
Et lĂ il se dit OK donc lĂ je me suis fait avoir : oui il s’est fait avoir.
Maintenant faisons la même chose avec un jeton de sécurité :
Le jeton de sĂ©curitĂ© c’est donc une petite chaĂ®ne de caractères, alors dans WordPress il fait 8 caractères ou 10 je crois : 10.
Elle est gĂ©nĂ©rĂ©e pour une session donnĂ©e c’est-Ă -dire :
- à chaque connexion dans WordPress ça va changer
- pour chaque action ça va changer
- pour chaque id de l’action ça va changer
- pour chaque utilisateur ça va changer
- et pour chaque installation ça va changer
Puisque rappelez-vous, on a parlĂ© des clĂ©s de sĂ©curitĂ© qui Ă©taient gĂ©nĂ©rĂ©es, eh bien tout ça c’est pris en compte, il y a beaucoup de paramètres qui font que ce nonce va ĂŞtre unique Ă un instant pour une action.
Après ce jeton, dans WordPress, il est valable 12 Ă 24 heures, pour pas que, si on ouvre une page deux minutes après, c’est terminĂ©, on se prend trop d’erreurs.
Donc je donne ce lien Ă Alex, mais comme le jeton de sĂ©curitĂ© a Ă©tĂ© fait pour moi, on va lui dire “non je ne peux pas valider l’action, le jeton n’est pas correct” et moi je ne peux pas deviner son jeton c’est absolument impossible.
Voilà à quoi sert un jeton de sécurité.
>>Alex : quand je le fais une action, par exemple mettre Ă jour, publier, supprimer, en fait WordPress attend le jeton.
>>Julio : c’est simple, s’il n’y a pas de jeton tu ne peux rien faire…
>>Alex : c’est comme la clĂ©, ça rentre dans la serrure c’est le bon truc ça passe, c’est pas ça, ça passe pas !
>>Julio : il y a bien une histoire de droits, c’est-Ă -dire l’administrateur a le droit de supprimer, mais ce n’est pas parce qu’il a le droit qui le voulait, donc il y a une diffĂ©rence avec le fait qu’il puisse le faire, ou qu’il veuille le faire, et le jeton, ça veut dire “je veux le faire” voyez ce n’est pas que les droits.
Quand un dĂ©veloppeur vĂ©rifie des droits souvent c’est Ă©crit “current user can administrator ou manage option“, ce n’est pas suffisant, on ne peut pas juste vĂ©rifier ça, parce qu’il suffirait de forcer un administrateur Ă le faire et ça c’est possible.
Donc avec le jeton de sĂ©curitĂ©, on est certain que l’action est faite par la personne dĂ©sirĂ©e, donc ça c’est un premier point important.
>>Alex : il y aura l’exemple en dessous
>Julio : on va faire un petit exemple mauvais avec un bon exemple en dessous.
Les chaînes de caractères
Maintenant parlons des chaĂ®nes de caractères qu’on va afficher dans un site en Ă©tant certain de ce qu’on affiche.
Donc je prends un exemple très basique :
Si je fais un “echo” de ce qui arrive en paramètre de ma barre d’URL, donc c’est ce qu’on appelle un “get”, donc il y a un paramètre par exemple text=bonjour
: le texte va s’Ă©crire dans mon site, ça va ĂŞtre Ă©crit “bonjour” très bien, mais qu’est-ce qui m’empĂŞche dans cette barre d’adresse d’ajouter des balises JavaScript et d’insĂ©rer du JavaScript et l’intĂ©rieur ? En fait il n’y a rien qui m’en empĂŞche !
Donc tout ce qui vient de la barre d’adresse s’Ă©crira sur mon site. Donc ce que je vais faire, je vais Ă©crire une URL JavaScript qui va chercher un script malicieux, je donne cette URL Ă un administrateur “echo”, ça va s’Ă©crire chez lui et lui le JavaScript va ĂŞtre exĂ©cutĂ©.
Et donc potentiellement avec le JavaScript :
- je peux m’envoyer des requĂŞtes ajax,
- je peux lire les cookies,
- je peux me les envoyer
donc c’est très dangereux.
Donc il y a trois choses Ă faire :
- soit on Ă©chappe
- soit on désinfecte et on sanitize
- ou soit on valide les choses
et alors lĂ , la chose Ă faire c’est se dire “OK, qu’est ce que je fais” : les trois ne sont pas Ă faire, parfois il faut en faire deux, parfois il faut faire un seul, mais pas n’importe lequel, dans le cas prĂ©sent je n’ai pas envie et je n’avais pas prĂ©vu qu’on puisse jouer avec des balises HTML et JavaScript.
Donc ce que je vais faire, c’est ce qu’on appelle un échappement, c’est-Ă -dire qu’on va prendre le contenu et on va enlever certains morceaux du contenu, lĂ je veux dire par exemple… je vais faire je ne sais, pas… on va faire, on va prendre wp_strip_all_tags
D’ailleurs je viens de confondre moi-mĂŞme puisque j’ai dit Ă©chappement et j’enlève du contenu donc lĂ c’est assez diffĂ©rent.
Pardon, je le refais : si j’Ă©chappe du contenu, tout ce qui va ĂŞtre Ă©crit dans la barre sera Ă©crit en tant que texte brut voilĂ c’est plutĂ´t ça, donc lĂ , quand j’Ă©chappe, le contenu est tel qu’il est mis dans la barre d’adresse, oui c’est plutĂ´t ça, alors qu’effectivement c’est la sanitization, la dĂ©sinfection, et la dĂ©sinfection va enlever des choses – je me confonds moi-mĂŞme voyez – et alors que si j’Ă©chappe, tout le contenu est bien Ă©crit.
Alors, si je n’avais pas prĂ©vu qu’on puisse Ă©crire des balises HTML, pas de problème, je veux juste faire un Ă©chappement, elles sont Ă©crites en dur ,cela sera Ă©crit script, JavaScript, etc., mais ça ne va pas s’exĂ©cuter.
Inversement, si je ne veux pas qu’on puisse insĂ©rer les balises, mĂŞme si elles n’ont pas d’effet, dans ces cas-lĂ je vais “sanitize” c’est-Ă -dire je vais dĂ©sinfecter le contenu.
Donc la phrase “bonjour JavaScript Alex” on va supprimer le contenu Ă l’intĂ©rieur, donc on peut utiliser wp_strip_all_tags
 – je mettrais bien sĂ»r les fonctions comme on a dit dans un article en description – dans ce cas-lĂ Â seuls les mots que j’ai dĂ©sirĂ©s vont rester donc il va seulement rester “bonjour Alex“.
Alors qu’un Ă©chappement, c’est les fonctions WordPress qui commencent par “esc”, ce qui veut dire “escape”, donc si je fais esc_html
, là ça veut dire que le contenu HTML sera affichĂ© tel qu’il arrive sur la page.
>>Alex : avec les balises et tout ça…
>>Julio : exactement donc :
l’Ă©chappement ça sert Ă garder le contenu comme il est, en Ă©tant certain qu’il n’est pas dangereux
la dĂ©sinfection : sanitize, ça sert Ă enlever du contenu qu’on ne souhaitait pas Ă l’intĂ©rieur.
Donc il y a plein de fonctions de sanitize, je vous mettrais encore une fois la liste en dessous.
Et il reste une troisième chose qui est la validation des données.
La validation des données
Si dans un formulaire vous mettez un champ email, qu’est ce qui empĂŞche la personne d’Ă©crire justement bonjour ou mettre “12” ou mettre n’importe quoi d’autre : une balise JavaScript, elle peut très bien tester ça.
Malheureusement pour vous ce champ il va servir Ă l’inscrire dans votre base de donnĂ©es dans laquelle vous allez lui envoyer un mot de passe par exemple, donc vous ne pouvez pas juste vous dire bon je vais sanitize, j’enlève les morceaux que je ne veux pas, bah non !
Le mail ne sera pas forcément bon, il ne recevra pas, etc. et en plus ça va générer des entrées en base qui ne servent à rien du tout.
L’Ă©chappement c’est pareil, on va Ă©chapper, mais finalement ce n’est pas une adresse mail, donc il va falloir valider d’abord le contenu.
Donc pour le valider, il y a par exemple la fonction is_email
 qui va vĂ©rifier que ce qu’on attend est bien un email.
>>Alex : que c’est au bon format
>>Julio : le bon format ! on peut vérifier aussi avec la fonction PHP filter_var
avec plein de paramètres, pour dire :
- est-ce que c’est une adresse IP,
- est ce que c’est une adresse e-mail,
- est-ce que c’est bien une chaĂ®ne,
- est-ce que c’est bien un chiffre, etc.
A quel moment est-ce qu’on fait ça, quand c’est bloquant, on ne valide que quand c’est bloquant !
Imaginons vous demandez aussi l’âge de la personne et dans l’âge elle met “toto”, Ă©coutez-moi je vais dire que dans ce cas-lĂ ce n’est pas bloquant, ce n’est pas grave, elle aura 0, je ne mets pas d’âge et plus tard dans son profil elle ira le remodifier.
Donc dans ce cas-lĂ je vais juste sanitize, je vais dire OK, je prends son contenu et je force le contenu Ă ĂŞtre un chiffre parce que c’est ce que j’attends et “toto” en chiffres ça donne zĂ©ro. Donc elle aura juste 0, je ne vais pas la bloquer pour l’âge ce n’est pas grave.
Si dans son prénom elle a tenté de mettre du JavaScript, je ne vais pas la bloquer pour ça, je sanitize, je laisse que ce qui est intéressant.
Par contre l’adresse mail c’est bloquant, parce que sans adresse mail, je ne peux pas aller plus loin dans mon formulaire, dans mon protocole, dans mon process de crĂ©ation de comptes, donc lĂ je vais valider la donnĂ©e et si elle n’est pas bonne, je renvoie sur une erreur pour dire “l’adresse e-mail est invalide“.
S’il y a des informations vraiment obligatoires qui vous bloquent Ă l’inscription – bon je prends l’exemple d’un formulaire d’inscription bien sĂ»r – ça vous validez, vous ne validez pas, vous renvoyez des erreurs.
Pour tout le reste, on fait du sanitize, comme ça vous avez des donnĂ©es propres et pour ce qui est de l’affichage vous pouvez Ă©chapper si ça ne vous dĂ©range pas, de ce qui est crĂ©Ă©, sinon vous pouvez aussi sanitize pour enlever le contenu qui ne vous intĂ©resse pas.
Conclusion
Donc il y a donc :
- les fonctions d’Ă©chappement,
- les fonctions désinfection
- et les fonctions de validation.
>>Alex : OK donc trois groupes de fonctions à bien les connaître, donc pour les personnes qui nous écoutent pourront creuser avec ton article juste en dessous.
>>Julio : il y a beaucoup de fonctions, il faut comprendre que les fonctions sont utilisables dans des contextes, que vous pouvez sanitize certains contenus, certains autres avec d’autres fonctions.
Comme il y a pas mal de fonctions de toute façon, ce qu’il faut faire c’est lire, vous lisez, vous lisez, vous lisez, vous lisez bien la doc et ensuite vous saurez Ă quel moment il faut l’utiliser quoi !
C’est une histoire de pratique de toute façon.
>>Alex : OK super bon ben merci d’avoir Ă©coutĂ© cette vidĂ©o un petit peu plus de technique et donc bien sĂ»r n’oubliez pas le petit pouce bleu !
Abonnez-vous aussi Ă la chaĂ®ne de WPMarmite et allez voir SecuPress.me pour en savoir plus sur la sĂ©curitĂ© WordPress et vous mettre Ă l’abri et donc Ă très bientĂ´t pour les prochaines vidĂ©os.
Au revoir, ciao, đź‘‹
Recevez gratuitement les prochains articles et accédez à des ressources exclusives. Plus de 20000 personnes l'ont fait, pourquoi pas vous ?
La dernière fournée d'articles
Tous les articlesWPMarmite News fĂŞte sa 100e Ă©dition (avec un concours) !
Aujourd’hui est un jour un peu spĂ©cial pour WPMarmite. Nous fĂŞtons la 100e Ă©dition de WPMarmite News, notre newsletter de veille WordPress ! 🥳 Si vous ĂŞtes un abonnĂ© de longue date, vous vous en rappelez peut-ĂŞtre : l’aventure avait…
cPanel : fonctionnalités et guide d’utilisation de cette interface pour votre site WordPress
Besoin de modifier la version PHP de votre site web ? C’est lĂ que ça se passe. Une adresse e-mail Ă crĂ©er ? C’est aussi lĂ que ça se passe. Il vous faut installer un certificat SSL au pied levĂ©…
YourTextGuru : notre avis sur cet outil d’aide à la rédaction SEO [2024]
Vous rĂ©digez des textes sur le web. Pour vous et/ou vos clients, le SEO est super important. Alors vous utilisez forcĂ©ment YourTextGuru. Quoi ? Vous ne vous servez pas de cet outil incontournable pour optimiser sĂ©mantiquement vos contenus ? Bouuuuhhhh,…