Dois-je utiliser wpdb prepare avant wpdb-> insert?
Si j'insère des valeurs dans une table wordpress à l'aide de wpdb-> insert, dois-je "nettoyer" mes données avant de les insérer ou cette méthode (wpdb-> insert) le fait-elle pour moi?
Non, vous ne devriez pas préparer ni échapper les données, cela est fait pour vous par la classe wpdb
.
A partir de la référence de la classe wpdb :
data :
(tableau) Données à insérer (en colonne => paires de valeurs). Les colonnes $ data et les valeurs $ data doivent être "brutes" (aucune des deux ne doit être échappée SQL).
Si, toutefois, vous écriviez votre propre SQL plutôt que d'utiliser la méthode insert
, alors oui, vous devriez vous échapper en utilisant prepare
.
Voici un avertissement pour la classe wpdb.
https://codex.wordpress.org/Class_Reference/wpdb
Un avertissement
Certaines des fonctions de cette classe prennent une instruction SQL en entrée. SQL doit échapper à toutes les valeurs non fiables que vous intégrez à la requête SQL pour empêcher les attaques par injection SQL. Consultez la documentation pour voir si la fonction que vous prévoyez d'utiliser échappe pour vous à SQL ou s'attend à ce qu'elle soit pré-échappée.
J'ai donc lu ceci comme suit: la classe wpdb ne prépare ni n'échappe automatiquement les données pour vous.
Je suis à peu près sûr que si vous ne pouvez pas faire confiance à 100% à la source de données dans votre code, je suggère d'utiliser la classe prepare (?).
Ne pensez pas que l’utilisation de la classe de préparation la corrigera sans l’utiliser correctement. Je suis assez nouveau dans ce domaine, alors merci de poster toute correction en guise de réponse si je ne me trompe pas.
$ wpdb-> prepare ("SELECT * DE la table WHERE ID =% d ET nom =% s", $ id, $ nom);
Dans la déclaration ci-dessus, il y a 2 attributs supplémentaires. Un pour l'ID et un pour le nom. Dans la mesure où je l'ai lu, chacun correspond dans l'ordre au nombre d'éléments de votre requête. Également% s = chaîne,% d = entier et% f = float.
En outre, d'après mes lectures, si vous ne mettez pas les attributs supplémentaires, alors préparez ne fera rien. Il y aura un avertissement, mais si vous désactivez cette option, vous ne le saurez peut-être pas.
Voici un exemple tiré de la référence de classe elle-même, dans laquelle ils ajoutent une classe préparée à un INSERT ci-dessous.
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
$ wpdb-> requête ($ wpdb-> prepare ("INSERT INTO $ wpdb-> postmeta (post_id, meta_key, meta_value) VALEURS (% d,% s,% s)", tableau (10, $ metakey, $ metavalue) ));
Mon souci est que la réponse votée est incorrecte selon la même page que "personne" fait référence. Je suppose que vous utilisez prepare (), mais pas d’autres méthodes d’échappement php standard, car j’ai considéré cette réponse comme correcte également ... jusqu’à ce que j’ai creusé plus profondément.
Quoi qu'il en soit ... peut-être que les choses ont changé depuis la réponse initiale.
Non, vous n'avez pas besoin d'empêcher les injections SQL lorsque vous utilisez - wpdb insert ou wpdb delete.
Voir les liens suivants:
https://codex.wordpress.org/Data_Validation#Database
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks