Wie kann ich einfache und doppelte Anführungszeichen in der SQL-Prepared-Anweisung umgehen?

8

Ich habe eine SQL-Anweisung ähnlich der in Perl:

%Vor%

Der $ a-Wert ist ein freier Text, der alles enthalten kann, einschließlich einfacher Anführungszeichen, Anführungszeichen, Back- und Front-Schrägstrich-Zeichen usw.

Wie können diese Zeichen maskiert werden, damit die SQL-Anweisung funktioniert?

Danke.

    
Sam 05.01.2010, 01:28
quelle

4 Antworten

21

Sie können entweder die Methode ->quote verwenden (vorausgesetzt, Sie verwenden DBI):

%Vor%

Besser ist es, Bind-Werte zu verwenden:

%Vor%

Dies sollte auch für Aufrufe von gespeicherten Prozeduren funktionieren, wobei angenommen wird, dass die Anweisung nach dem Erweitern der Zeichenfolgen gültiges SQL ist. Dies kann Treiber / DB-spezifisch sein, also YMMV.

%Vor%     
mopoke 05.01.2010, 01:32
quelle
9

Verwenden Sie eine vorbereitete Aussage. Ersetzen Sie die Variable durch ein?. Um ein Beispiel von DBI-Hilfeseiten zu kritisieren:

%Vor%

Die Interpolation von Benutzereingaben in Ihr SQL verlangt Sicherheitslücken.

    
fennec 05.01.2010 01:33
quelle
6

Wenn Sie Platzhalter für Abfrageparameter verwenden, müssen Sie den Inhalt der Zeichenfolgen nicht umgehen.

%Vor%

Wenn der DBI echte Abfrageparameter verwendet, sendet er die Parameterwerte getrennt von der SQL-Anweisung an das RDBMS. Die Werte werden niemals mit der SQL-Anweisungszeichenfolge kombiniert, daher haben die Werte nie die Möglichkeit, SQL-Injection zu verursachen.

Wenn der DBI vorbereitete Anweisungen "emuliert", indem er die Variablen in die Abfragezeichenfolge interpoliert, sollte DBI die korrekte Escape-Logik behandeln, so dass Sie dies nicht tun müssen. Lassen Sie die Experten (diejenigen, die DBI schreiben und testen) sich Gedanken darüber machen, wie es geht.

    
Bill Karwin 05.01.2010 01:47
quelle
3

Wenn Sie nicht - & gt; quote verwenden möchten (aus irgendeinem Grund läuft diese Funktion nicht auf meiner Version von DBI), versuchen Sie Folgendes:

%Vor%

Ich tendiere dazu, das Gleiche mit einfachen Anführungszeichen und Kommas zu machen, nur um sicher zu sein.

Scheint gut für mich zu funktionieren ...!

    
Chris Denman 05.01.2010 23:08
quelle

Tags und Links