wpdb-insert: dois-je me préparer contre l'injection SQL?

11

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?

    
posée redconservatory 15.08.2011 - 13:57

3 réponses

17

Non, vous ne devez ni préparer ni échapper les données, ceci est fait pour vous par la classe wpdb .

De la référence de la classe wpdb :

  

données :

     

(tableau) Données à insérer (en colonnes = > 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 code SQL plutôt que d'utiliser la méthode insert , alors, vous devriez vous échapper en utilisant prepare .

    
réponse donnée nobody 15.08.2011 - 14:23
0

Voici un avertissement pour la classe wpdb.

enlace

  

Un avertissement

     

Certaines fonctions de cette classe prennent une instruction SQL en entrée.   Vous devez échapper à SQL toutes les valeurs non fiables que vous intégrez dans le code SQL.   requête pour empêcher les attaques par injection SQL. Consultez la documentation pour voir   si la fonction que vous envisagez d’utiliser échappe pour vous à SQL ou s’attend à ce qu’elle   être pré-échappé.

J'ai donc lu ceci: la classe wpdb ne prépare ni n'échappe automatiquement les données pour vous.

Je suis presque sûr que si vous ne pouvez pas faire confiance à 100% à la source de données dans votre code, je vous suggère d'utiliser la classe de préparation (?).

Ne pensez pas que l’utilisation de la classe de préparation corrigera le problème sans l’utiliser correctement. Je suis assez nouveau dans ce domaine, alors merci de bien vouloir poster votre réponse si je ne me trompe pas.

$ wpdb- > prepare ("table SELECT * FROM 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. Egalement% s = chaîne,% d = entier et% f = float.

De plus, 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 le désactivez, vous ne le saurez peut-être pas.

Voici un exemple tiré de la référence de classe elle-même, dans laquelle une classe de préparation est insérée dans un INSERT ci-dessous.

enlace

  

$ wpdb- > requête ($ wpdb- > prepare ("INSERT INTO $ wpdb- > postmeta (   post_id, meta_key, meta_value) VALUES (% d,% s,% s) ",           array (10, $ metakey, $ metavalue)));

Ce qui me préoccupe, c'est que la réponse votée est incorrecte, selon la même page à laquelle "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 ... les choses ont peut-être changé depuis la réponse initiale.

    
réponse donnée Felixius 28.08.2018 - 08:36
0

Non, vous n'avez pas besoin d'empêcher les injections SQL lorsque vous utilisez - wpdb insert ou wpdb delete.

Voir les liens suivants:

enlace

enlace

    
réponse donnée oguegbu ijeoma 03.12.2018 - 13:24

Lire d'autres questions sur les étiquettes