Domanda

Ho una situazione in cui devo usare il metodo ExecuteCommand di LINQ per eseguire un inserimento.

Qualcosa di simile (semplificato ai fini di questa domanda):

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

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

La domanda è se questo è a prova di iniezione SQL allo stesso modo delle query con parametri?

È stato utile?

Soluzione

Ho fatto qualche ricerca e ho trovato questo:

  

Nel mio semplice test, sembra   i parametri passati in   ExecuteQuery ed ExecuteCommand   i metodi vengono automaticamente codificati in SQL   in base al valore fornito. Così   se passi una stringa con un '   carattere, verrà automaticamente SQL   sfuggire a ''. Credo un simile   la politica viene utilizzata per altri tipi di dati   come DateTimes, Decimals, ecc.

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
(Scorri verso il basso per trovarlo)

Questo mi sembra un po 'strano - la maggior parte degli altri strumenti .Net lo sanno meglio di "quotare SQL escape" nulla; usano invece parametri di query reali.

Altri suggerimenti

LINQ to SQL utilizza exec_sql con parametri, che è molto più sicuro rispetto alla concatenazione nella stringa di query ad hoc. Dovrebbe essere altrettanto sicuro nell'iniezione di SQL rispetto all'utilizzo di SqlCommand e della sua raccolta Paramaters (in effetti, è probabilmente ciò che LINQ to SQL utilizza internamente). Inoltre, quanto è sicuro che ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top