Zitat von
Phoenix:
Zitat von
HolgerCW:
Vielen dank für die Infos.
Habe da aber leider ein Problem. Ich nutze für mein ganzes Programm beim INSERT folgende Procedure:
Wie könnte ich diese umbauen, damit es klappt ? Will jetzt nicht mein ganzes Programm ändern.
Aua. Dieser Code ist nicht nur ein Abmahnungsgrund, sondern sogar einer für eine fristlose Kündigung.
Was, wenn ein Benutzer z.B. bei einem der einzugebenden Werte folgendes eingibt:
Code:
; DROP TABLE nameeinerwichtigentabelle; --
?
Du öffnest damit dem einfachsten aller Angriffe, namentlich der
SQL Injection, sämtliche Türen. Also. Umbauen auf Parameter und nirgends in der Anwendung auf die Idee kommen,
SQL anhand von Benutzereingaben zusammenzubauen. Das ist das allerschlimmste was man tun kann.
Darf ich mal kurz dazwischen ein gepflegtes "Nö" einwerfen?
Vielleicht klappt sowas mit Datenbankclients die es nicht interessiert, daß alle Befehle fehlerfrei ausgeführt werden sollten, bevor sie den nächsten ausführen. Aber bei Oracle sehe ich diese Gefahr nicht. Angenommen es soll folgendes passieren:
update customer set name = 'Willi';
Wenn jetzt der Tabellenname durch eine Variable gefüllt wird, die das hier beinhaltet
; DROP TABLE nameeinerwichtigentabelle; --
dann würde man ja dieses hier bekommen:
update ; DROP TABLE nameeinerwichtigentabelle; -- set name = 'Willi';
Und das gibt dann eine
Exception mit einem Oraclefehler (Nummer weiss ich nicht, aber sinngemäß kommt da: Befehl nicht korrekt beendet, und der Rest wird gar nicht mehr ausgeführt. Ich weiss nicht wie das
MySQL und Konsorten handhaben, aber wenn die soo leicht hinters Licht zu führen sind...hats vielleicht doch einen Grund Geld für ein
DBMS zu zahlen.
Selbstverständlich sollte man lieber mit Parametern arbeiten, wegen Übersichtlichkeit und auch aus Performancegründen (Querys, bei denen sich nur die Inhalte der Paramter ändern werden schneller ausgeführt, als wenn man die gleiche
Query mit unterschiedlichen Inhalten absendet.
Sherlock