Ich habe einige Code, der parametrisierte Abfragen verwendet, um gegen die Injektion zu verhindern, aber ich muss auch in der Lage sein, die Abfrage unabhängig von der Struktur der Tabelle dynamisch zu erstellen. Was ist der richtige Weg, dies zu tun?Parametrisierte SQL-Spalten?
Hier ist ein Beispiel, sagen wir eine Tabelle mit Spalten Name, Adresse, Telefon. Ich habe eine Webseite, wo ich Spalten anzeigen und füllen Sie eine Auswahl Dropdown mit ihnen als Optionen.
Als nächstes habe ich ein Textfeld namens Suche. Dieses Textfeld wird als Parameter verwendet.
Derzeit mein Code sieht ungefähr so aus:
result = pquery('SELECT * FROM contacts WHERE `' + escape(column) + '`=?', search);
Ich erhalte ein ekliges Gefühl von ihm aber. Der Grund, warum ich parametrisierte Abfragen verwende, besteht darin, die Verwendung von escape zu vermeiden. Außerdem ist Escape wahrscheinlich nicht für das Entkommen von Spaltennamen konzipiert.
Wie kann ich sicherstellen, dass dies so funktioniert, wie ich es vorhabe?
Edit: Der Grund, warum ich dynamische Abfragen verlangen, ist, dass das Schema vom Benutzer konfigurierbar ist, und ich werde nicht um etwas hart codiert zu beheben sein.
Harte Codierung ist keine Option für mich, danke für den Vorschlag! – Martin
Mein Punkt ist nicht, die Spaltennamen fest zu codieren, aber sie nicht von der Schnittstelle zu übergeben. Sie können die Liste der Spalten dynamisch abrufen und weiterhin dieselbe Lösung verwenden. Machen Sie die Spaltennamen nicht zu einem Teil der übergebenen Daten - das schützt Sie vor SQL-Injection. – zigdon
+1 Ja, ich möchte sagen: Lassen Sie Benutzer Daten eingeben, aber lassen Sie nicht Benutzer Code zur Verfügung stellen. –