Accueil ¬Ľ Le Point S√©cu ¬Ľ ūüõ° Point SECU #23 : D√©couvrez les fonctions de s√©curit√© de WordPress

Vid√©o : ūüõ° Point SECU #23 : D√©couvrez les fonctions de s√©curit√© de WordPress



Salut √† tous ūüĎčet bienvenue dans le Point¬†S√©cu avec Julio de SecuPress et donc aujourd’hui on va voir des¬†fonctions de s√©curisation de WordPress.

Donc ça 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.

1. 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√© √ßa 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
  • et 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 c’est √ßa, c’est √ßa je ne me trompe¬†pas, il 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 ya 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

2. Les cha√ģnes de caract√®res

Maintenant ce dont je voudrais parler, c’est les 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 texte=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 ce qu’il faut faire c’est… il ya 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¬†strip_tags…¬† on va prendre¬†strip_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 sanityse 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 faire du strip_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.

3. 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 ya par exemple la fonction ease email¬†qui va v√©rifier que ce qu’on attend est¬†bien un email.

>>Alex : que ça est le 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.

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…

Qu’est qu’il ne faut¬†pas oublier… le pouce !

Abonnez-vous aussi 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, ūüĎč

 



Si vous avez apprécié cet article, inscrivez-vous à la newsletter

Recevez gratuitement les prochains articles et accédez à des ressources exclusives. Plus de 20 000 personnes l'ont fait, pourquoi pas vous ?

C'est parti, je m'inscris !

ut tristique ipsum ipsum accumsan Sed non
Partagez
Tweetez
Partagez