Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 Firebird: #AUTOCOMMIT_OFF
Autor: Jens-Arne Reumschüssel (---.dip0.t-ipconnect.de)
Datum:   02.09.20 20:09

Hallo,

die Befehle, mit denen man SQL-Befehle vorbereiten und die Ausführung verzögern kann, z.B. um mit prepared statements zu arbeiten (um SQL-Injection zu verhindern), funktionieren offenbar nicht mit der Firebird-Variante der @db-Funktionen. Das wäre so etwas wie:

@db("fbExec",hFBDB%,"#AUTOCOMMIT_OFF",1)

Es wäre schön, wenn das auch hier ginge, und nicht nur mit der ODBC-Variante der SQL-Befehle. Es gibt nämlich keinen (freien) ODBC-Treiber für Firebird 3.x. Der einzige, den ich gefunden habe, kostet $149,95.

Falls ich irgendetwas falsch gemacht habe und das eigentlich doch schon geht, dann bin ich für Hinweise dankbar.

Beste Grüße, Jens-Arne

Beitrag beantworten
 
 Re: Firebird: #AUTOCOMMIT_OFF
Autor: Michael Wodrich (---.customer.vsm.sh)
Datum:   04.09.20 16:41


Die alte Variante (odbc/sql):
#AUTOCOMMIT_ON
#ROLLBACK | #COMMIT
#AUTOCOMMIT_OFF


Die neue Variante (für FireBird und SQLite):
#TRANSACTION
#ROLLBACK | #COMMIT

Suche in der Hilfe (bei mir X4) nach "transaction" und im unteren Bereich dann
"Sonstige erweiterte Befehle".

Es klappt

--
Programmieren, das spannendste Detektivspiel der Welt.
Programmierumgebung: | XProfan (neueste) | Win (neueste)


Beitrag beantworten
 
 Re: Firebird: #AUTOCOMMIT_OFF
Autor: Jens-Arne Reumschüssel (---.dip0.t-ipconnect.de)
Datum:   04.09.20 22:20

Hallo Michael,

ok, herzlichen Dank, das ist es tatsächlich. Sehr versteckt... ;-)

Aber wie bekomme ich da jetzt prepared statements hin?
Sowas wie

@db("fbExec",_hFBDB%,"#TRANSACTION",1)
@db("fbExec",_hFBDB%,"SELECT * FROM Daten WHERE da_ID=?",1)
... ??? (wenn's ginge, was dann hier, um den Parameter zu fülen?)
@db("fbExec",_hFBDB%,"#COMMIT",1)

funktioniert auch in diesem Modus nicht.

Hast Du da eine Ahnung?

Beste Grüße, Jens-Arne



Nachricht bearbeitet (04.09.20 22:30)

Beitrag beantworten
 
 Re: Firebird: #AUTOCOMMIT_OFF
Autor: Michael Wodrich (---.customer.vsm.sh)
Datum:   05.09.20 22:44


(Tabelle Ersatzzeichen)
\: - Beginn einer eingebetteten Variable (v13.1)


Declare daten_id&
,"SELECT * FROM Daten WHERE da_ID=\:daten_id&",1)

Declare long daten_id
,"SELECT * FROM Daten WHERE da_ID=\:daten_id;",1)



Die Escape-Sequenzen sind per Standard aktiv. Um dies auszuschalten gibt es
Set("Escape",0)

--
Programmieren, das spannendste Detektivspiel der Welt.
Programmierumgebung: | XProfan (neueste) | Win (neueste)


Beitrag beantworten
 
 Re: Firebird: #AUTOCOMMIT_OFF
Autor: Michael Wodrich (---.customer.vsm.sh)
Datum:   05.09.20 22:50


Das Zauberwort in der Hilfe ist "eingebettet".

--
Programmieren, das spannendste Detektivspiel der Welt.
Programmierumgebung: | XProfan (neueste) | Win (neueste)


Beitrag beantworten
 
 Re: Firebird: #AUTOCOMMIT_OFF
Autor: Jens-Arne Reumschüssel (---.dip0.t-ipconnect.de)
Datum:   09.09.20 21:07

Hmm, ok, das ist aber offenbar nichts anderes als

,"SELECT * FROM Daten WHERE da_ID="+@str$(dante_id&),1)

Das ist kein prepared statement, sondern auch dort wird ja direkt ein SQL-Befehl durchexerziert, also von Firebird intern vorbereitet und gleich ausgeführt. Damit kann man dann immer noch SQL-Injection-Probleme bekommen. Ich möchte ein Statement vorbereiten und danach (beliebig oft) mit einem immer anderen Parameter füttern. Dann wird das Statement von Firebird nur einmal präpariert (also ein Ausführungsplan erstellt). Auf diese Weise kann der böse Nutzer zum Zeitpunkt der Parameterübergabe keinen SQL-Code mehr einschleusen, da der eigentliche SQL-Befehl nicht mehr vorbereitet und interpretiert wird. Er liegt schon fertig vor und kann nicht mehr geändert werden, sondern bekommt nur noch seinen Parameter geliefert. Das ist in anderen Datenbanken ganz einfach, nur in Firebird bekomme ich es einfach nicht hin.

Siehe hier: https://de.wikipedia.org/wiki/SQL-Injection

Gruß, Jens-Arne

PS: Irgendwie scheint die Funktion "Antworten per eMail an oben genannte Adresse weiterleiten" in diesem Forum nicht mehr zu funktionieren, jedenfalls nicht bei mir. Deshalb dauert es immer ein bisschen, bis ich mitbekommen habe, dass mir jemand geantwortet hat.

Beitrag beantworten
 
 Re: Firebird: #AUTOCOMMIT_OFF
Autor: Michael Wodrich (---.customer.vsm.sh)
Datum:   10.09.20 19:57

Ja leider gibt es .Prep() und .ExecuteMany() nicht in der Schnittstelle, die XProfan benutzt. Ob sich das ändern lässt kann wohl nur Roland prüfen.

Bei SQLite3 gibt es ein Objekt, das Prepared Statements bearbeiten kann. Irgendjemand hatte mal eine DLL gebaut, die auf alle SQLITE-Funktionen zugreifen kann.

--
Programmieren, das spannendste Detektivspiel der Welt.
Programmierumgebung: | XProfan (neueste) | Win (neueste)


Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org