Glossaire

Injection SQL

L'injection SQL est une attaque qui exploite les failles de validation des données pour manipuler la base de données d'un site WordPress.

L’injection SQL (ou SQLi, pour SQL Injection) est l’une des techniques d’attaque les plus répandues sur le web. Elle consiste à insérer du code SQL malveillant dans un champ de formulaire, une URL ou tout autre paramètre transmis à la base de données, afin d’en modifier le comportement.

Comment fonctionne une injection SQL

Lorsqu’une application web construit une requête SQL en concaténant directement des données saisies par l’utilisateur sans les valider, elle est potentiellement vulnérable. Un attaquant peut injecter des instructions SQL arbitraires pour modifier la logique de la requête : contourner l’authentification, extraire des données sensibles, modifier des enregistrements ou supprimer des tables entières.

La classe $wpdb de WordPress intègre une méthode prepare() qui protège contre ce type d’attaque en paramétrant les requêtes. Les développeurs de plugins qui la contournent exposent leurs utilisateurs.

WordPress et les injections SQL : les points d’entrée courants

Même avec WordPress core protégé, des plugins ou thèmes tiers mal codés peuvent introduire des failles :

  • Formulaires de recherche personnalisés passant des paramètres non filtrés dans WP_Query
  • Plugins de filtrage (WooCommerce, LMS) avec des paramètres GET construits en concaténation directe
  • Champs de tri et de pagination non validés dans les requêtes de listing
  • API REST custom avec des endpoints qui acceptent des paramètres SQL sans préparation

Comment protéger son WordPress contre les injections SQL

La protection passe par plusieurs niveaux complémentaires :

  • Mises à jour régulières : la majorité des failles SQLi connues sont corrigées dans les updates de plugins
  • Utiliser $wpdb->prepare() dans tout code personnalisé accédant à la base
  • Activer un WAF (Web Application Firewall) qui filtre les payloads SQL avant qu’ils atteignent la base de données
  • Restreindre les privilèges MySQL : l’utilisateur DB WordPress ne doit pas avoir les droits DROP ou FILE
  • Scanner régulièrement les plugins installés pour détecter les vulnérabilités connues (CVE)

Questions fréquentes

Une injection SQL est une technique d'attaque qui consiste à insérer du code SQL malveillant dans les paramètres d'une application web pour manipuler sa base de données. Elle peut permettre à un attaquant de lire, modifier ou supprimer des données, voire de prendre le contrôle du serveur.
WordPress core intègre des protections via la classe $wpdb et sa méthode prepare(). Cependant, des plugins ou thèmes tiers mal codés peuvent introduire des failles. Il est essentiel de maintenir tous les composants à jour et de n'utiliser que des extensions auditées.
Les signes d'une injection SQL active incluent des erreurs de base de données visibles, un comportement anormal des formulaires, des redirections vers des pages inconnues ou un ralentissement inexpliqué du site. Un scan de sécurité régulier permet de détecter les plugins vulnérables avant qu'ils soient exploités.
Retour en haut