Tentee Training Center

Comment sécuriser son plugin?

4 janvier 2023

COMMENT SÉCURISER SON PLUGIN?

Introduction

Chaque plugin publié sur WordPress.org est soumis à des vérifications manuelles par leur équipe de bénévoles. Très souvent, les plugins sont rejetés et on vous demande de corriger les erreurs. Vous trouverez ici une liste des erreurs typiques qui entraîneront le rejet du plugin – et comment les corriger.

nous devons savoir que l’introduction des méthodes de sécurité dans notre code ne se fait pas à la fin mais dès le début du codage. 

 Lors de la création d’un plugin les développeurs doivent s’assurer de couvrir toutes les vulnérabilités de leur plugin. Pour les aider nous avons recensé les différentes actions à exécuter pour pouvoir dire que “Votre plugin est sécurisé” notamment :

  1. Ecrire un code php sécurisé
  2. Faire attention aux injections SQL
  3. Utilisez des nonces pour protéger vos demandes
  4. Utilisez des outils et des services pour analyser votre code
  5. N’utilisez pas de bibliothèques externes à partir de CDN
  6. Ajouter rel= »noopener » ou rel= »noreferrer » à vos liens

Ecrire un code PHP sécurisé

Dans ce module nous devons sécuriser les entrées, les sorties et valider les données car nous ne contrôlons pas l’entrée ni la sortie. Vous devez vous souvenir de “Ne jamais faire confiance à l’entrée de l’utilisateur” et que même l’administrateur est un utilisateur.

Validation des données (valider)

Pour effectuer une validation , utilisé des instructions conditionnelles.

valiattion_wordpress
exemple de Syntaxe de validation

Sécurisation de l’entrées (désinfecter)

Désinfecte c’est prendre certaines données et les nettoyer pour vous puis renvoyer la version propre.

désinfection°zordpress
exemple de cas désinfection

Sécurisation de la sortie(s’échapper)

l’échappement consiste à sécuriser les données potentiellement dangereuses.

exemple de cas d’échappement

pour la désinfection et l’échappement WordPress a de nombreuses fonctions d’assistance que vous pouvez utiliser pour les scénarios les plus courants. Pour en savoir plus voici lire ces articles.

  • fonction output
  • fonction input
  • fonction de validation

nous avons aussi des fonctions de nettoyage et d’échappement intégrées PHP.

Faire attention aux injections SQL

Comme son nom l’indique, une personne malveillante essayera d’accéder à votre base de données en modifiant votre requête sql , cela se produit dans des champs de formulaires qui acceptent les entrées des utilisateurs.

Pour être à l’abri vous devez arrêter  d’interagir directement avec la base de données, et utiliser la classe d’abstraction de base de données intégrée dans WordPress “$wpdb”.

La classe $wpdb dans WordPress possède toutes les fonctionnalités CRUD dont vous avez besoin pour interagir avec la base de données en toute sécurité, et vous pouvez même utiliser la classe pour interagir avec vos propres tables de base de données si votre plugin ou votre thème en a besoin.

La chose la plus importante que vous puissiez faire pour résoudre le problème est de préparer vos données avec la $wpdb->prepare()fonction.

Cette fonction prend une chaîne de requête préparée et un tableau des arguments que vous souhaitez ajouter à la requête SQL.

Utilisez des nonces pour protéger vos demandes

Le système nonce dans WordPress peut vous aider à prévenir de nombreuses attaques. Un nonce en termes de sécurité est un nombre utilisé une seule fois. L’idée est d’ajouter ce numéro unique à toutes les demandes que vous faites depuis votre code vers l’installation de WordPress afin de vérifier que cette demande est légitime.C’est un peu comme avoir un mot de passe secret qu’il faut donner .

Cependant, les nonces dans WordPress sont un peu différents.Ils ne sont pas un nombre et le nonce n’est utilisé qu’une seule fois.

La façon dont vous utilisez un nonce est que le code PHP qui enregistre vos fichiers JavaScript génère une petite combinaison unique de chiffres et de lettres et les analyse afin que votre code JS puisse le lire.

Chaque fois que le code JavaScript envoie une requête à votre site Web, il envoie ce morceau de code, et si le code ne correspond pas, votre code doit ignorer complètement la requête.

C’est toujours un peu plus facile avec un exemple, alors voyons une manière simple de charger un fichier .js dans votre plugin :

Dans un plugin WordPress

charger js dans un plugin

Dans un plugin WordPress

charge js dans un fichier

Dans un plugin WordPress à partir du code JavaScript

Dans un plugin WordPress à partir du code JavaScript

Utilisez des outils et des services pour analyser votre code

Il existe de nombreux services automatisés pour aider à identifier les problèmes de code. Exakat , SonarSource et PHPStan pour n’en nommer que quelques-uns, et un de mes préférés – Coderisk.com – Un moyen facile de trouver certaines des erreurs de sécurité les plus évidentes dans votre code.

N’utilisez pas de bibliothèques externes à partir de CDN

Bien qu’il puisse être tentant d’inclure toutes les bibliothèques dont vous pourriez avoir besoin via cdnjs.com ou d’autres CDN mondiaux gratuits, il y a quelques inconvénients.

Tout d’abord, vous n’avez aucun contrôle sur les bibliothèques et tout code malveillant qui se faufile dans les fichiers que vous incluez.

Bien que les CDN soient généralement stables et rapides par définition, ils sont également sujets à davantage d’attaques. Si votre code repose sur une bibliothèque JS sur un CDN attaqué, votre plugin et votre thème se chargeront très lentement ou pas du tout.

Ajouter rel= »noopener » ou rel= »noreferrer » à vos liens

La création de liens vers des ressources externes est tout à fait normale, et la méthode traditionnelle d’ajout target=”_blank”à ces liens est logique car vous ne voulez pas que vos utilisateurs quittent votre page de plugin/thème.

Cependant, cela vous ouvre la porte à ce qu’on appelle Tabnabbing . Il s’agit d’un problème de sécurité où un code JavaScript malveillant peut voler des informations à vos utilisateurs en abusant de la fonctionnalité window.opener de JavaScript.

Empêcher cela peut être aussi simple que d’ajouter rel=”noopener”à vos liens. La page vers laquelle vous créez un lien aujourd’hui est peut-être très bien, mais cela pourrait changer à l’avenir.

rel=noopener signifie que la page vers laquelle vous créez un lien ne peut pas accéder aux informations ni prendre le contrôle de votre page.

rel=noreferrer fait de même et demande également au navigateur de ne transmettre aucune information de référence via l’en-tête Referrer. L’ajout rel=”noreferrer”signifie que la page vers laquelle vous créez un lien ne sait pas d’où vient votre visiteur.

Conclusion

conclusion

Nous avons fait le tour des actions à mettre en place pour protéger notre plugin ,Bien que risque zéro n’existe pas nous paré pour des attaques quelconque.Nous pouvons aller beaucoup plus loin mais vous devez gagner plus de compétences dans le domaines de la sécurité ou  contactez un spécialiste en sécurité pour sécure votre plugin.

Laisser un Commentaire