2016-06-08 37 views
6

Ho notato che quando si utilizza Contiene in EFPossibile SQL Injection quando si utilizza contiene con EF?

.Where(i => myListOfStrings.Contains(i.Value)) 

L'SQL generato assomiglia a questo

IN ('Value1', 'Value2') 

Dal momento che i valori non sono parametrizzati, non è possibile iniettare un po 'di SQL?

+0

Da dove viene visualizzato l'SQL generato? Profiler? Suppongo che EF stia eseguendo la codifica stringa pertinente dei valori prima di passare la query. –

+0

Provalo! Inserisci qualcosa come '') OR 1 = 1 -' – Rodders

+0

http://stackoverflow.com/questions/473173/will-using-linq-to-sql-help-prevent-sql-injection –

risposta

3

Non si costruirà semplicemente un'istruzione IN dal proprio Contains. Almeno sfuggirà alle virgolette singole (raddoppiandole). Si supponga di voler iniettare qualcosa come "') o 1 = 1--", come suggerito nei commenti, supponendo che verrà convertito in:

where ... IN ('') OR 1 = 1 -- the rest 

Ma perché le virgolette singole sono fuggiti che sarà:

where ... IN (''') OR 1 = 1 --' -- the rest 

Quindi siamo al sicuro qui, perché tutta la tua dichiarazione è trattata come stringa.