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 !

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.

du code pour les développeurs

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 :

  1. soit on Ă©chappe
  2. soit on désinfecte et on sanitize
  3. 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.

WPMarmite News, votre antisèche sur l’actu WordPress

Recevez gratuitement les dernières infos de l’écosystème WordPress tous les 15 jours et créez de meilleurs sites.

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, đź‘‹