PHP Warning: Missing argument 2 for wpdb::prepare() ou « Comment ne pas avoir de Warning du prepare »

PHP Warning: Missing argument 2 for wpdb::prepare() ou « Comment ne pas avoir de Warning du prepare »

Bonjour

Bonjour auteur de plugin ou thème ! Vous avez peut-être trouvé cet article après une recherche sur Internet pour l’erreur suivante : « PHP Warning: Missing argument 2 for wpdb::prepare(). »

Explications

Donc, c’est un nouvel avertissement depuis 3.5. Aucun site n’est cassé, tout fonctionne comme avant. Mais, c’est en effet quelque chose que vous devez regarder, parce que vous risquez d’exposer vos utilisateurs à une vulnérabilité de type « Injection SQL« . Et, ce n’est pas amusant !

Voici comment $wpdb->prepare() est censé fonctionner :

Voyez comment $id – un entier, sans doute – a été passé comme deuxième argument ? Cela correspond au premier marqueur, %d. Puis, $name (une chaà®ne) a été passé en troisième argument, donc le second marqueur, %s. Cela permet de s’assurer de votre requête est sà»re, et empêche quelque chose comme la blague du « Little Bobby Tables« . (Remarque: la bande dessinée est fausse, ne pas désinfecter – toujours préparer vos requêtes.)

http://xkcd.com/327/

Le problème est qu’un certain nombre de gens appelaient $wpdb->prepare() avec un seul argument, comme ceci:

Parfois, il n’y a aucun paramètre (%d, %s, ou pour les décimals, %f) dans cette requête. Cela fonctionne correctement, mais l’appel de préparation ne fait rien. Vous devriez plutôt appeler directement la requête, car il n’y a pas d’entrées.

Quel est le problème

Mais c’est là que réside le problème:

Vous le voyez ce problème ? Cette requête n’est pas sécurisée ! Vous pouvez penser que vous « préparez » la requête, mais vous n’y êtes pas – vous passez $id directement dans la requête, non préparé. Et ceci est la raison pour laquelle $wpdb->prepare() émet maintenant un avertissement s’il n’est pas appelé avec plus d’un argument. Parce que vous ne pouvez pas préparer une requête avec un seul argument.

Voici un exemple correct:

Ce n’était pas une décision facile à prendre. Nous n’aimons pas afficher les avertissements PHP en plein visage des utilisateurs et des développeurs. Mais étant donné les risques de sécurité potentiels, nous avons voulu que chacun puisse immédiatement examiner la façon dont l’exécution des requêtes est faite. Et, bien sà»r, toujours les préparer correctement.

Pour en savoir plus

wpdb Codex reference, #22262, et [22429].

Source : http://make.wordpress.org/…/php-warning-missing-argument-2-for-wpdb-prepare/
Par Andrew Nacin
Traduction/Adaptation Julio Potier.

Vous aimez ? Partagez !


Réagir à cet article

220 caractères maximum