Frage

Ich habe bemerkt, wie folgt vor:

Eine ASP.NET MVC-Website unter Entwicklung bekommt einen SQL-Fehler „Nicht geschlossene Anführungszeichen ...“, wenn es eine LINQ-Aufruf einer gespeicherten Prozedur macht die dynamische SQL enthält.

Zum Beispiel:

SP GetEmployees mit Parametern aufgerufen [filter_name], den Wert hat [N'For] diesen Fehler wirft

Ich kann das Problem beheben, indem ein .replace tun ( "'", " ''") wie folgt aus:

[Function(Name = "dbo.GetEmployees")]
public ISingleResult<EmployeeRow> GetEmployees(
            [Parameter(DbType = "NVarChar(MAX)")] string filter_name)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), filter_name.Replace("'", "''"));
    return ((ISingleResult<EmployeeRow>)(result.ReturnValue));
}

Nun, ich fühle mich nicht wie das geht Trog all meine SPs und dies manuell zu tun. Gibt es eine Möglichkeit, dies eine allgemeine Regel zu machen, die für alle Linq SP Anrufe angewendet werden, sollte ich jetzt und wird in Zukunft machen?

Auch ist es etwas anderes soll ich entkommen werden, um SQL-Injection-Angriffe zu verhindern?

EDIT:

Hinzugefügt Frage: Wird diese Probleme mit SPs geben, die dynamische SQL umfassen nicht? Ich meine, wenn ich den Namen in der Datenbank hinzuzufügen, wird er als [n''for] gespeichert werden? Ich habe erkannt, wird dies wahrscheinlich der Fall sein, und dann werde ich auf jeden Fall in manuell tun muß

War es hilfreich?

Lösung 2

Ich werde eine (mögliche) Antwort hier auf meine eigene Frage geben. (Lassen Sie mich in den Kommentaren wissen, wenn Sie einverstanden sind)

Es scheint richtig, dass dies innerhalb der SP behandelt werden. Die Anwendung soll nicht kümmern müssen, ob eine bestimmte SP enthält dynamischen SQL oder nicht.

Andere Tipps

Ich schlage vor, Sie bewegen sich weg von dynamischen SQL, als dass die Wurzel des Problems ist. (Ich weiß, das, obwohl viele andere Probleme verursachen könnten, und vielleicht nicht möglich sein.)

Wenn Sie nicht garantieren können, dass die dynamische SQL Sie bauen ist sicher, (so steuern Sie diese Logik intern, mit nichts durch vom Benutzer übergeben wird), es geht um ein Problem sein.

Was würde passieren, wenn filter_name eine \‘enthalten oder -?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top