2013-04-08 11 views
6

Queste funzioni consentono l'accesso alle funzioni speciali (SqlClient) in SQL. Ad esempio "mi piace" o "tra". Inoltre forniscono loro uno strato di astrazione più bello per loro. Da non confondere con stored procedure (s) "funzioni" che è l'argomento di questo altro question.Le funzioni dell'operatore SQL per Entity Framework sono sicure rispetto all'iniezione SQL?

La mia domanda per cui non riesco a trovare una risposta completa è. Sono sicuri da usare o sto aprendo il sistema a SQL injection attack? Uso sempre variabili vincolate durante la scrittura di SqlCommands regolari.

Ma nel passaggio a Entity Framework. C'è meno controllo sulle istruzioni SQL. Non mi dispiace, ma non posso fare a meno di preoccuparmi di concatenare una stringa proveniente da un browser e passarla a una funzione.

Ecco un esempio:

var QueryResult = EFContext.Table.Where(x => 
    SqlFunctions.PatIndex("%" + Potentially_unsafe_search_keyword + "%", 
          x.Column) > 0); 

Ho fatto alcuni test e tracciato la SQL effettivo inviato al server. Le virgolette singole vengono sfuggite automaticamente. Quindi chiaramente c'è una certa protezione lì. C'è un po 'di igienizzazione in atto. Le istruzioni di inserimento utilizzano le variabili di binding. Dovrei accontentarmi della sostituzione della quota singola? C'è qualcos'altro che succede dietro le quinte?

+0

Testarlo. Controlla il tuo db per scoprire esattamente che cosa è stato generato da SQL. –

+0

@ marvc1 L'ho fatto, è così che ho scoperto che i singoli qout sono sfuggiti tra virgolette. Ma io non sono un esperto di SQL injection, è davvero entusiasmante? –

+0

prova la riga 'x '; DROP TABLE tableName; - 'e vedere se quel tavolo è caduto. Sostituisci prima il nome della tabella. –

risposta

3

Ogni costante, variabile, parametro in Linq viene passato come parametro di comando in IDbCommand, che a sua volta è sfuggito dal driver sottostante.

A meno che non vi sia un bug, tutte le query EF e le funzioni di supporto SQL sono sicure contro gli attacchi SQL injection.

Problemi correlati