Einzelnen Beitrag anzeigen

Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#11

AW: Parameterverwendung bei DB-, Feld- und Tabellennamen

  Alt 14. Jan 2016, 16:23
Äää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.
Wir haben und da mal eine Klasse TSQL gebastelt, mit der man auf Basis einer Stringliste SQL-Statements zusammen bauen konnte. "Add" wurde als Property realisiert, damit man auf die Klammern verzichten konnte, das machte das im Quelltext lesbarer. Gleichzeitig gab es diverse Hilfsfunktionen für verschiedene Datenbanken. Dabei ging es hauptsächlich um das angenehme, lesbare zusammenbauen der SQL-Statements, ein paar Sachen waren drin um SQL-Injektion zu verhindern, es wurde aber trotzdem auch mit Parametern gearbeitet:

Delphi-Quellcode:
function SQL_Beispiel:String;
var s:TSQL;
begin
  s:=TSQL.Create;
  s.Add := 'Select';
  s.Add := ' Wert1,';
  s.Add := ' Wert2,';
  s.Add := ' Wert3';
  s.Add := 'From';
  s.Add := ' Tabelle';
  s.Add := 'Where';
  s.Add := ' Wert4 = ' + s.oracleStr('Suchstring'); // sowas wie QuotedStr
  s.Add := ' and Wert5 > ' + s.oracleDateOfStr('01.12.2015'); // würde zu To_Date('01.12.2015','dd.mm.yyyy')
  Result:=s.Text;
  //s.Show //zum Anzeigen des Statements in einem Memo eines kleinen Popup-Forms.
  s.Free;
end;
Ralph
  Mit Zitat antworten Zitat