WPDB prépare - comme% - des espaces réservés?

9

Ces {xxx...}espaces réservés %dans une instruction LIKE sont-ils normaux? Si oui, quand sont-ils reconvertis en %?

SHELL
wp> global $wpdb;
wp> $q = "%s";
=> string(2) "%s"
wp> $pq = $wpdb->prepare($q, '%hi%');
=> string(136) "'{6e039dc0b074a5ff6828a070d0c24708d132341f32dff55a053f1410beabaacd}hi{6e039dc0b074a5ff6828a070d0c24708d132341f32dff55a053f1410beabaacd}'"
Paul
la source

Réponses:

12

Oui, ils sont normaux. Ils ont été ajoutés en 4.8.3 pour corriger une vulnérabilité d'injection SQL.

Vous pouvez lire un article décrivant les raisons techniques de cette situation ici et le ticket pour le changement ici .

Les caractères d'espace réservé sont remplacés par les caractères aléatoires sur la dernière ligne de $wpdb->prepare()la $wpdb->add_placeholder_escape()fonction, qui appelle en $wpdb->placeholder_escape()interne.

Ces espaces réservés sont supprimés $wpdb->query()par la $wpdb->remove_placeholder_escape()fonction qui est ajoutée en tant que filtre au querycrochet.

Jacob Peattie
la source