Hat ExecuteCommand LINQ Schutz vor SQL-Injection-Angriffe?
-
03-07-2019 - |
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?
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