2008-10-01 8 views
15

Ich habe eine Situation, in der ich die ExecuteCommand-Methode von LINQ verwenden muss, um eine Einfügung auszuführen.Bietet LINQs ExecuteCommand Schutz vor SQL-Injection-Angriffen?

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

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-Nachweis in der gleichen Art und Weise parametrisierte Abfragen sind ist?

Antwort

14

Haben einige der Forschung, und ich fand dies:

In meiner einfachen Prüfung, sieht es wie die in den gebenen Parameter ExecuteQuery und ExecuteCommand Methoden sind automatisch verschlüsselt SQL basierend auf dem Wert zugeführt wird, . So Wenn Sie eine Zeichenfolge mit einem ' Zeichen übergeben, wird es automatisch SQL es zu' 'entkommen. Ich glaube, dass eine ähnliche Politik für andere Datentypen verwendet wird wie Datetime, Dezimalzahlen usw.

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

Dies ist für mich ein wenig seltsam scheint - Die meisten anderen .Net-Tools wissen besser als "SQL Escape" alles; Sie verwenden stattdessen echte Abfrageparameter.

+8

Der Kommentator, ScottGu, ist mehr als nur ein zufälliger Typ im Netz! http://en.wikipedia.org/wiki/Scott_Guthrie – nathaniel

0

LINQ to SQL verwendet exec_sql mit Parametern, die viel sicherer als Verketten in die Ad-hoc-Abfrage Zeichenfolge ist. Es sollte so sicher gegen SQL-Injection sein wie SqlCommand und seine Paramaters-Sammlung (tatsächlich ist es wahrscheinlich, was LINQ to SQL intern verwendet). Wie sicher ist dann das?

+0

SqlCommand und Parameter sind sicher, es sei denn die gespeicherte Prozedur, die aufgerufen wird, manipuliert Zeichenfolgen, um mit sp_exec zu verarbeiten. – DamienG

Verwandte Themen