AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Parameterverwendung bei DB-, Feld- und Tabellennamen
Thema durchsuchen
Ansicht
Themen-Optionen

Parameterverwendung bei DB-, Feld- und Tabellennamen

Ein Thema von freejay · begonnen am 14. Jan 2016 · letzter Beitrag vom 15. Jan 2016
Antwort Antwort
Seite 1 von 3  1 23      
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
272 Beiträge
 
Delphi 11 Alexandria
 
#1

Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 12:01
Datenbank: MySQL • Version: 5.x • Zugriff über: MyDac
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
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 12:09
Nimm ein Makro: https://www.devart.com/mydac/docs/?work_macros.htm
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 12:10
Du kannst lediglich Werte parametrisieren, aber keine (Tabellen-, Feld- oder sonstigen) Bezeichner, das hast Du richtig erkannt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
272 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 12:51
"Macro" ist ja dafür ein komischer Name, aber das ist genau das, was ich brauche!

Dank Euch!
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 12:52
Warum komisch, es ist ja eine Makroersetzung innerhalb der Clientkomponenten.
Markus Kinzler
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
272 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 13:03
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!
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#7

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 14:15
Äää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.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 15:16
Äää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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
272 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 15:36
Äää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.
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 15:47
Wenn diese vom DBMS direkt unterstützt werden und nicht von der Zugriffsschicht emuliert werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
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