Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Parameterverwendung bei DB-, Feld- und Tabellennamen (https://www.delphipraxis.net/187909-parameterverwendung-bei-db-feld-und-tabellennamen.html)

freejay 14. Jan 2016 12:01

Datenbank: MySQL • Version: 5.x • Zugriff über: MyDac

Parameterverwendung bei DB-, Feld- und Tabellennamen
 
Hallo zusammen,

ich habe früher meine SQL-Statements immer über den Formatbefehl zusammengesetzt, z.B.:
Code:
MyQuery.SQL.Text := format('SELECT * FROM `%s`;',[Tabellenname]);
Da dies Methode ziemlich unsicher ist, wenn der Tabellenname beispielsweise von einem User eingetippt werden kann (Stichwort "SQL-Injection"), möchte ich künftig lieber sauber mit Parametern arbeiten. Bei Values - z.B. in Where-Bedingungen - ist das auch gar kein Problem. Aber bei Feld-, DB- und Tabellennamen funktioniert das scheinbar nicht. Beispiel:
Code:
MyQuery.SQL.Text := 'SELECT * FROM :TabName;';
MyQuery.ParamByName('TabName').AsString := TabellenName;
MyQuery.Open;
Das führt zu einem Fehler, da der Tabellenname offenbar mit führendem und schließendem Hochkomma in das SQL-Staement eingebaut wird.
:TabName in die bei Feld- und Tabellennamen üblichen Hochkommas zusetzen (`:TabName`), hilft auch nicht...

Übersehe ich da was oder funktionieren DB-, Tabellen- und Feldnamen einfach nicht über Parameter?

Danke im Voraus!

Freejay

Uwe Raabe 14. Jan 2016 12:09

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen
 
Nimm ein Makro: https://www.devart.com/mydac/docs/?work_macros.htm

DeddyH 14. Jan 2016 12:10

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen
 
Du kannst lediglich Werte parametrisieren, aber keine (Tabellen-, Feld- oder sonstigen) Bezeichner, das hast Du richtig erkannt.

freejay 14. Jan 2016 12:51

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen
 
"Macro" ist ja dafür ein komischer Name, aber das ist genau das, was ich brauche! ;-)

Dank Euch!

mkinzler 14. Jan 2016 12:52

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen
 
Warum komisch, es ist ja eine Makroersetzung innerhalb der Clientkomponenten.

freejay 14. Jan 2016 13:03

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen
 
Ich verstehe und einem Makro ungefähr folgendes:
Zitat:

Ein Makro ist in der Softwareentwicklung eine unter einer bestimmten Bezeichnung zusammengefasste Folge von Anweisungen oder Deklarationen, um diese ... mit nur einem einfachen Aufruf ausführen zu können.
[Quelle: Wikipedia]

Für mich hat das Ersetzen von bestimmten kleinen Strings in einem größeren String durch andere kleine Strings mit dem wie oben verstandenen Begriff "Makro" nicht viel zu tun.

Aber das darf natürlich jeder beliebig anders sehen! ;-)

joachimd 14. Jan 2016 14:15

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1326989)

Ääähhhh, sorry für meine Unwissenheit, aber wenn auf der Clientseite der Tabellenname mit einem Macro ersetzt wird, kann es doch trotzdem noch zu SQL Injection kommen!? Oder ist die Macro-Funktion schlau genug, das zu erkennen?
Falls nicht würde ich den eingegebenen Text anhand von System-Tabellen verifizieren
(gibt es eine Tabelle, dessen Text gleich ist wie der eingegebene) und es dann wie im Usprungspost selbst ersetzen.

Uwe Raabe 14. Jan 2016 15:16

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen
 
Zitat:

Zitat von joachimd (Beitrag 1327015)
Ääähhhh, sorry für meine Unwissenheit, aber wenn auf der Clientseite der Tabellenname mit einem Macro ersetzt wird, kann es doch trotzdem noch zu SQL Injection kommen!? Oder ist die Macro-Funktion schlau genug, das zu erkennen?

Das kann ich aufgrund fehlender Einblicke in die MyDAC-Sourcen nicht beurteilen (also ebenso unwissend), aber der Einwand ist natürlich durchaus berechtigt. Zumindest kann man vorher überprüfen, ob der in das Makro einzusetzende Wert die Vorgaben für einen validen Bezeichner erfüllt.

freejay 14. Jan 2016 15:36

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen
 
Zitat:

Zitat von joachimd (Beitrag 1327015)
Ääähhhh, sorry für meine Unwissenheit, aber wenn auf der Clientseite der Tabellenname mit einem Macro ersetzt wird, kann es doch trotzdem noch zu SQL Injection kommen!?

Ja, davon gehe ich aus. Aber erstens war das mit dem Tabellennamen nur ein in meiner Praxis nicht vorkommendes Beispiel und zweitens ging es mir zusätzlich um einen "objektmäßigeren" Code - also nicht immer diese String-/Format-Pfriemeleien - auch wenn SQL natürlich per se eher textlastig is... ;-)

Die Benutzung von Parametern verhindert allerdings meines Wissens nach sicher SQL-Injections.

mkinzler 14. Jan 2016 15:47

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen
 
Wenn diese vom DBMS direkt unterstützt werden und nicht von der Zugriffsschicht emuliert werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr.
Seite 1 von 3  1 23   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz