zurück  •  Downloads  •  Impressum

Frequently Asked Questions 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 viermillionendreihundertdreizehntausendsiebenhundertsiebzehn mal aufgerufen.