Frage

Ich habe eine Situation, wo ich ExecuteCommand LINQ Methode verwenden, muß einen Einsatz ausgeführt werden.

So etwas wie (vereinfacht für die Zwecke dieser Frage):

object[] oParams = { Guid.NewGuid(), rec.WebMethodID };

TransLogDataContext.ExecuteCommand (
"INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})",
oParams);

Die Frage ist, ob diese SQL-Injection-Beweis parametrisierte Abfragen sind in der gleichen Art und Weise ist?

War es hilfreich?

Lösung

Haben einige der Forschung, und ich fand diese:

  

In meiner einfachen Prüfung, es sieht aus wie   Die Parameter in den vergangen   ExecuteQuery und ExecuteCommand   Methoden sind automatisch SQL codierten   basierend auf dem Wert zugeführt wird. Damit   wenn Sie in einem String mit einem "übergeben   Charakter, wird es automatisch SQL   entfliehen sie ‚‘. Ich glaube, eine ähnliche   Politik ist für andere Datentypen verwendet   wie Datetime, Dezimalzahlen, etc.

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
(Sie haben den Weg nach unten scrollen, es zu finden)

Dies ist ein wenig seltsam für mich scheint - die meisten anderen .Net-Tools wissen besser als auf „SQL-Escape“ etwas; sie verwenden echte Abfrageparameter statt.

Andere Tipps

LINQ to SQL verwendet EXEC_SQL mit Parametern, die viel sicherer ist, in den Ad-hoc-Abfrage-String als verketten. Es sollte als mit SqlCommand und seine Paramater Sammlung Againt SQL-Injection als sicher sein (in der Tat, es ist wahrscheinlich das, was LINQ to SQL verwendet intern). Dann wieder, wie sicher ist , die

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