2013-04-08 6 views
6

Diese Funktionen ermöglichen den Zugriff auf spezielle Funktionen (SqlClient) in SQL. Zum Beispiel "wie" oder "zwischen". Und sie geben ihnen auch eine schönere gemeinsame Abstraktionsebene. Nicht zu verwechseln mit gespeicherten Prozeduren "Funktionen", die das Thema dieser anderen question ist.Sind SQL-Operatorfunktionen für Entity Framework sicher gegen SQL-Injection?

Meine Frage, für die ich keine vollständige Antwort finden kann, ist. Sind sie sicher zu verwenden, oder öffne ich das System zu einem SQL injection attack? Ich verwende immer gebundene Variablen, wenn ich reguläre Sql-Befehle schreibe.

Aber bei der Umstellung auf Entity Framework. Es gibt weniger Kontrolle über die SQL-Anweisungen. Es stört mich nicht, aber ich kann mir nicht helfen, mir Sorgen zu machen, wenn ich eine Zeichenfolge aus einem Browser verkette und sie an eine Funktion weitergebe. Hier

ein Beispiel:

var QueryResult = EFContext.Table.Where(x => 
    SqlFunctions.PatIndex("%" + Potentially_unsafe_search_keyword + "%", 
          x.Column) > 0); 

Ich habe einige Tests und verfolgte die tatsächliche SQL an den Server gesendet. Einfache Anführungszeichen werden automatisch ausgeblendet. Es gibt also dort einen gewissen Schutz. Es findet eine gewisse Bereinigung statt. Insert-Anweisungen verwenden Bind-Variablen. Sollte ich mit dem einfachen Angebotsersatz zufrieden sein? Gibt es hinter den Kulissen noch etwas anderes?

+0

Testen Sie es. Profilieren Sie Ihre Datenbank, um genau herauszufinden, welche SQL generiert wurde. –

+0

@ marvc1 Ich habe, so habe ich festgestellt, dass einzelne Qoutes in doppelte Anführungszeichen entkommen sind. Aber ich bin kein SQL-Injektionsexperte, ist das wirklich wichtig? –

+0

versuchen Sie die Zeile 'x '; DROP TABLE Tabellenname; - "und sehen, ob diese Tabelle fallen gelassen wird. Ersetzen Sie zuerst den Tabellennamen. –

Antwort

3

Jeder Konstante, Variable, Parameter in Linq wird als Befehlsparameter in IDbCommand übergeben, die wiederum von zugrunde liegenden Treiber geschützt ist.

Sofern kein Fehler vorliegt, sind alle EF-Abfragen und SQL-Hilfsfunktionen vor SQL-Injection-Angriffen sicher.