Hochkomma in Selectabfrage

Guten Morgen,

ich habe ein Problem mit einem Selectstatement. In der Abfrage kommt im Empfaenger.NAME ein Hochkomma vor, welches eine Fehlermeldung verursacht z.B O’Hara . Wie kann ich diesen Fehler ausschalten?

rs.Open „Select * from EMPFAENGER where [NAME1]=’“ & Empfaenger.VORNAME & „’ AND [NAME2]=’“ & Empfaenger.NAME & „’ AND [STRASSE_POSTFACH]=’“ & Empfaenger.STRASSE_POSTFACH & „’ AND [PLZ]=’“ & Empfaenger.PLZ & „’ AND [ORT]=’“ & Empfaenger.ORT & „’ AND [AUFTRAGGEBER_ID]=’“ & data.AUFTRAGGEBER_ID & „’“, Connection2, adOpenDynamic, adLockOptimistic

Vielen Dank im Voraus.

MfG

Hallo,

rs.Open „Select * from EMPFAENGER where [NAME1]=’“ &
Empfaenger.VORNAME & „’ AND [NAME2]=’“ & Empfaenger.NAME & „’
AND [STRASSE_POSTFACH]=’“ & Empfaenger.STRASSE_POSTFACH & „’
AND [PLZ]=’“ & Empfaenger.PLZ & „’ AND [ORT]=’“ &
Empfaenger.ORT & „’ AND [AUFTRAGGEBER_ID]=’“ &
data.AUFTRAGGEBER_ID & „’“, Connection2, adOpenDynamic,
adLockOptimistic

Solcher Code ist anfällig für SQL-Injection.
Du solltest dir eine Bibliothek suchen, die so etwas in dieser Form macht:
query = db->prepare(„SELECT * FROM foo WHERE foo.id = ?“)
Und dann db->execute(my_id)
Also dass keine Literale in die Query direkt hineingeschrieben werden.

Grüße,
Moritz

Solcher Code ist anfällig für SQL-Injection.
Du solltest dir eine Bibliothek suchen, die so etwas in dieser
Form macht:
query = db->prepare(„SELECT * FROM foo WHERE foo.id = ?“)
Und dann db->execute(my_id)
Also dass keine Literale in die Query direkt hineingeschrieben
werden.

Bin noch Anfänger und habe das nicht ganz verstanden wie ich das umsetzen muss, sorry.

Hallo,

Bin noch Anfänger und habe das nicht ganz verstanden wie ich
das umsetzen muss, sorry.

Ich probiers mal mit einer ausführlicheren Erklärung:

Angenommen, du willst die abgespeicherten Daten einer Person abfragen, und hast ein Eingabefeld auf deiner Homepage, in das jemand den Namen eingeben kann. Der Wert wird in $name gespeichert.
Wenn du jetzt eine Abfrage der Form
Select * From person Where name = „$name“
machst, dann kann das ziemlich in die Hose gehen. Weil wenn jemand in das Eingabefeld
mein_name"; drop table person; select * from person where name = "
eingibt, sieht deine Query so aus:
Select * from person Where name = „mein_name“; drop table person; Select * from person where name = „“;
Und das sind auf einmal drei Queries, von denen die zweite deine ganze Datenbank löscht. Pech gehabt.
Das nennt sich „SQL Injection“.

Deswegen schreibt man nicht einfach die Variable $name in die SQL-Query rein. Sondern man lässt das Bibliotheken mach, denen man die Variablen als Liste übergeben kann.
Das sieht dann so aus:
„Select * from person Where name = ?“, $name
Damit bist du diese Sicherheitslücke los, und es können auch beliebige Zeichen in $name stehen, ohne dass es Probleme gibt.

Wenn du uns sagst, welche Programmiersprache du verwendest, kann dir vielleicht jemand bei der Suche nach einer entsprechenden Bibliothek helfen.

Für Perl gibt es z.B. DBI. Du kannst dir mal http://search.cpan.org/~timb/DBI-1.52/DBI.pm#Outline… durchlesen, da wird erklärt, wie man diese Bibliothek benutzt. Und ich vermute, dass es für fast alle Programmiersprachen ähnliche Bibliotheken gibt.

War das jetzt ein wenig verständlicher?

Grüße,
Moritz