Wie kann dieser SQL-Abfragecode durch Benutzereingaben unterbrochen / ausgenutzt werden? [Duplikat]

8

Wir haben eine Legacy-App, die keine Abfragen mit Positionsparametern durchführt, und überall gibt es SQL. Es wurde entschieden (bevor ich hier anfing), dass, da Benutzereingaben Apostrophe enthalten können, jede Zeichenketteneingabe für diese Apostrophe manuell maskiert werden sollte.

Hier ist der wesentliche Originalcode (nicht von mir geschrieben), der zur leichteren Verwendung in C # übersetzt wurde:

%Vor%

Das scheint wirklich so zu sein, dass es irgendwie kaputt gehen kann, aber ich weiß nicht, wie es durch Benutzereingaben ausgenutzt werden könnte. Nehmen wir an, dass die Benutzereingabe ungefiltert ist, bis sie _IsValidLogin erreicht, und vergessen Sie, dass Passwörter scheinbar im Nur-Text-Format gespeichert sind.

Die Lösung, um es für gut zu halten, ist offensichtlich - verwenden Sie Positionsparameter - aber ich brauche etwas Munition, um dem Management zu zeigen, warum / wie dieser Code unsicher ist, so dass Zeit / $ zugewiesen werden kann, um behoben zu werden / p>

Hinweis: Ich nehme an, dass dies möglich ist, aber das ist möglicherweise nicht der Fall. Ich bin kein SQL-Superstar.

Hinweis 2: Ich habe diese Frage als datenbankunabhängig geäußert, aber wenn Sie diesen Code für eine bestimmte Engine ausnutzen können, begrüße ich Ihren Beitrag.

    
Jon Seigel 04.03.2010, 14:37
quelle

3 Antworten

3

Es könnte durch Backslashes ausgelöst werden.

%Vor%

wird zu:

%Vor%

die Abfrage:

%Vor%

-- Ist die Kommentarmarke in diesem Beispiel.

Die Lösung geht davon aus, dass das Programm nur Apostrophe filtert (Duplikate).

    
erenon 04.03.2010 14:44
quelle
1

Das ist ein wirklich guter Artikel: Ссылка

Siehe "Den Tabellennamen finden".

    
Brian Bay 04.03.2010 14:54
quelle
0

Nun, ich kann nicht sehen, wie verletzlich es ist. Also, lasst uns einen anderen Grund diskutieren, warum es geändert werden sollte - es ist ziemlich ineffektiv. In MSSQL (und ich denke, die meisten anderen High-End-SQL-Server) werden Abfragen analysiert, und ein Ausführungsplan wird erstellt, und dann werden die Abfrage und der Plan gespeichert. Wenn eine exact -Kopie der Abfrage erneut angefordert wird, wird der gespeicherte Ausführungsplan verwendet. Parameter haben keinen Einfluss darauf, wenn Sie Parameter verwenden, werden die Pläne wiederverwendet. Wenn Sie den Text einbetten, wird es nie.

    
James Curran 04.03.2010 14:49
quelle