zurück
•
Downloads
•
Impressum
F
requently
A
sked
Q
uestions zu
Filemaker
und anderen Sachen.
Sie wollen uns verlinken? Ja gerne, bitte kopieren Sie einfach folgenden Link:
ODBC und SQL-Injektion, Parametrisierte Queryes
Die in der Adresszeile des Browsers gezeigte URL sollten Sie wegen enthaltener Sessioninformationen (S(...)) möglichst
NICHT
benutzen.
Bota
C#, .NET, ASP.NET
die Module - Anleitungen
Filemaker Pro
Filemaker Server
Google Maps Business View
Google Maps, Geodatenbanken
Hardwareprobleme
html
interna
kolor.com (ptp, apg)
os/x yosemity / el capitan
pano2vr
vmware fusion
Windows 10
Windows xp / 2003 / Vista / 7
Youtube
Label
Label
Filemaker Pro
-
ODBC und SQL-Injektion, Parametrisierte Queryes
Um dem Problem
SQL-Injektion
vorzubeugen, ist es ratsam, das SQL-Statement NICHT aus den Benutzereingaben schnell und schmerzfrei zu konkatenieren, sondern in Form von Parametern zu übergeben.
Beispiel:
Statt
fmpconn = new System.Data.Odbc.OdbcConnection(fmpconnstring);
fmpconn.Open();
schreibe = new System.Data.Odbc.OdbcCommand("update fmpsidExterndaten set wert='" + wert + "' where fmpsid='" + fmpsid + "' and schluessel='" + schluessel + "'", fmpconn);
schreibe.ExecuteNonQuery ();
fmpconn.Close();
nimmt man besser folgenden Code:
fmpconn = new System.Data.Odbc.OdbcConnection(fmpconnstring);
fmpconn.Open();
schreibe = new System.Data.Odbc.OdbcCommand("update fmpsidExterndaten set wert=? where fmpsid=? and schluessel=?", fmpconn);
schreibe.Parameters.Add("$wert", System.Data.Odbc.OdbcType.NVarChar);
schreibe.Parameters.Add("$sid", System.Data.Odbc.OdbcType.NVarChar);
schreibe.Parameters.Add("$schluessel", System.Data.Odbc.OdbcType.NVarChar);
schreibe.Parameters["$wert"].Value = wert;
schreibe.Parameters["$fmpsid"].Value = fmpsid;
schreibe.Parameters["$schluessel"].Value = schluessel;
schreibe.ExecuteNonQuery ();
fmpconn.Close();
Obwohl deutlich länger und schreibintensiver, ist durch die zweite Version das Problem SQL-Injektion komplett umgangen. Die Parameter (?, bzw. später @wert) werden NICHT im eigentlichen SQL-Kommando integriert, sondern werden über den ODBC-Treiber getrennt an die Datenbank übergeben. Ein "versehentliches" oder gewolltes interpretieren der Parameter als eigenständiges SQL-Kommando wird so verhindert.
Dabei muß beachtet wrden, daß im gegensatz zu System.Data... bei ODBC die Parameter im SQL-Kommando NICHT benannt werden, sondern durch ein anonymes ? gekennzeichnet werden. Um die Parameter-Platzhalter den eigenlichen Parameter zuzuordnen, müssen diese in exakt derselben Reihenfolgen angelegt werden, wie sie im SQL-Kommandotext vorkommen.
Diese Seite wurde viermillionendreihundertdreißigtausendachthundertsechsundzwanzig mal aufgerufen.