3 Stimmen

sql-injektion verhindern

Gibt es eine Möglichkeit, Sql-Injection durch die Verwendung von Stored Procedures zu verhindern?

Ich habe eine Sql-Abfrage als

select column name from table where field ='@value'
cmd.parameters.add('@value', value);

Ich verwende parametrisierte Abfragen mit geringsten Rechten. Wie kann ich eine einfache gespeicherte Prozedur schreiben, um eine Sql-Injection zu verhindern. Ist das möglich?

7voto

Yogesh Bhadauirya Punkte 1215
 select column name from table where field =@value

     cmd.parameters.add('@value', value);

SQL-Parameter vermeiden das Problem der Sql-Injection.

Sie müssen nur die =-Bedingung mit Parameter ändern. überprüfen Sie die obige Abfrage.

6voto

Kevin Wienhold Punkte 331

Die Verwendung von parametrisierten Abfragen allein sollte meines Wissens bereits Sql-Injection-Angriffe verhindern.

2voto

MatBailie Punkte 77040

Wenn Sie parametrisierte Abfragen verwenden, sollten Sie die Anführungszeichen um @value nicht benötigen ( @value 代わりに '@value' ), sofern der @value-Parameter als String definiert ist.

Das Erstellen einer gespeicherten Prozedur funktioniert auf die gleiche Weise. @value würde als VARCHAR oder ähnliches definiert werden und somit nur Zeichenketten akzeptieren. Dann referenzieren Sie @value statt '@value' in der gespeicherten Prozedur.

CREATE PROCEDURE my_proc (IN @value VARCHAR(32))
BEGIN
  SELECT column name FROM table WHERE field = @value
END

0voto

DWolf Punkte 673

C#

   cmd.parameters.Add("?value", value);

ist veraltet

zur Aktualisierung für @Yogesh Bhadauirya angegeben,

   cmd.Parameters.AddWithValue("?value", value);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X