it-swarm.com.de

wpdb-> insert: muss ich mich gegen SQL Injection vorbereiten?

Muss ich wpdb vorbereiten bevor wpdb-> einfügen?

Wenn ich mit wpdb-> insert Werte in eine WordPress-Tabelle einfüge, muss ich meine Daten vor dem Einfügen "bereinigen" oder erledigt diese Methode (wpdb-> insert) dies für mich?

12
redconservatory

Nein, Sie sollten die Daten nicht vorbereiten oder entkommen, dies wird von der Klasse wpdb für Sie erledigt.

Aus der wpdb-Klassenreferenz :

Daten :

(Array) Daten, die eingefügt werden sollen (in Spalte => Wertepaare). Sowohl $ data-Spalten als auch $ data-Werte sollten "raw" sein (SQL-Escape-Zeichen dürfen nicht verwendet werden).

Wenn Sie jedoch Ihr eigenes SQL schreiben, anstatt die insert -Methode zu verwenden, sollten Sie sich mit prepare davon entfernen.

18
nobody

Das Folgende ist eine Warnung für die wpdb-Klasse.

https://codex.wordpress.org/Class_Reference/wpdb

Eine Warnung

Einige Funktionen in dieser Klasse verwenden eine SQL-Anweisung als Eingabe. Sie müssen SQL-Escapezeichen für alle nicht vertrauenswürdigen Werte setzen, die Sie in die SQL-Abfrage einbeziehen, um SQL-Injection-Angriffe zu verhindern. Überprüfen Sie die Dokumentation, um festzustellen, ob die von Ihnen geplante Funktion SQL entgeht oder erwartet, dass sie vor dem Escape-Vorgang ausgeführt wird.

Also ich lese das als - die wpdb-Klasse bereitet die Daten nicht automatisch für Sie vor oder entkommt ihnen.

Ich bin mir ziemlich sicher, dass ich die Verwendung der prepare-Klasse (?) Vorschlage, wenn Sie der Datenquelle in Ihrem Code nicht 100% vertrauen können.

Denken Sie nicht, dass die Verwendung der prepare-Klasse das Problem beheben kann, ohne die prepare-Klasse ordnungsgemäß zu verwenden. Ich bin ziemlich neu in diesem Bereich, bitte poste alle Korrekturen als Antwort, wenn ich nicht Recht habe.

$ wpdb-> prepare ("SELECT * FROM Tabelle WHERE ID =% d AND Name =% s", $ id, $ name);

In der obigen Anweisung gibt es zwei zusätzliche Attribute. Eine für die ID und eine für den Namen. Soweit ich es gelesen habe, entspricht jedes der Anzahl der Elemente in Ihrer Abfrage. Auch% s = string,% d = integer und% f = float.

Wenn Sie meiner Lektüre nach keine zusätzlichen Attribute eingeben, kann prepare eigentlich nichts bewirken. Es wird eine Warnung angezeigt, aber wenn Sie diese ausschalten, werden Sie es vielleicht nicht wissen.

Hier ist ein Beispiel aus der Klassenreferenz selbst, in der eine Vorbereitungsklasse zu einem INSERT hinzugefügt wird.

https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

$ wpdb-> query ($ wpdb-> prepare ("EINFÜGEN IN $ wpdb-> postmeta (post_id, meta_key, meta_value) VALUES (% d,% s,% s)", array (10, $ metakey, $ metavalue) ));

Ich mache mir Sorgen, dass die überstimmte Antwort auf derselben Seite, auf die sich "niemand" bezieht, falsch ist. Ich gehe davon aus, dass Sie prepare () verwenden, aber keine anderen standardmäßigen PHP-Fluchtmethoden, da ich diese Antwort ebenfalls als richtig angesehen habe ... bis ich tiefer gegraben habe.

Wie auch immer ... vielleicht haben sich die Dinge seit der ursprünglichen Antwort geändert.

0
Felixius

Nein, Sie müssen SQL-Injections nicht verhindern, wenn Sie Folgendes verwenden: wpdb insert oder wpdb delete . enter image description here

Siehe die folgenden Links:

https://codex.wordpress.org/Data_Validation#Database

https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

0
oguegbu ijeoma