2 Stimmen

Entity Framework und die Raw-String-Abfrage - Schutz vor SQL-Injection

Ich führe eine String-Abfrage mit EF 4 aus:

string query = "SELECT * FROM Table WHERE ....";

  [+ build WHERE clausule based on the user's input values]

 db.ExecuteStoreQuery<TAble>(query).ToList();

Ich frage mich, wie man diese Abfrage von SQL Injection in der WHERE-Klausel verhindern kann. Irgendwelche Ideen?

5voto

Thomas Levesque Punkte 277723

Sie müssen eine parametrisierte Abfrage verwenden:

// Build where clause
var filters = new StringBuilder();
var parameters = new List<object>();
if (!string.IsNullOrEmpty(name))
{
    if (filters.Length > 0)
        filters.Append(" AND ");
    filters.Append("name = @name");
    var param = new SqlParameter("@name", SqlDbType.NVarChar);
    param.Value = name;
    parameters.Add(param);
}
...

// Build query
string query = "SELECT * FROM Table";
if (filters.Length > 0)
    query = query + " WHERE " + filters;

// Execute
db.ExecuteStoreQuery<TAble>(query, parameters.ToArray()).ToList();

1voto

Ladislav Mrnka Punkte 355028

Sie werden dies auf die gleiche Weise verhindern wie beim Bau der SqlCommand . Sie machen die Abfrage parametrisiert und fügen eine Sammlung von Parametern als zweites Argument in ExecuteStoreQuery Methode (wenn Sie nur Werte übergeben, erstellt EF die Parameter für Sie, aber Sie müssen sie in der richtigen Reihenfolge übergeben, wie sie in der Abfrage vorhanden sind).

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