2013-04-08 8 views
6

Te funkcje dają dostęp do funkcji specjalnych (SqlClient) w SQL. Na przykład "lubię" lub "między". Dają także ładniejszą warstwę abstrakcji dla nich. Nie mylić z "procedurami" (procedurami) przechowywanymi w ramach procedury, które są tematem tego innego question.Czy funkcje operatora SQL dla Entity Framework są bezpieczne przed iniekcją SQL?

Moje pytanie, na które nie mogę znaleźć pełnej odpowiedzi, brzmi: Czy są bezpieczne w użyciu, czy też mogę otworzyć system na SQL injection attack? Zawsze używam zmiennych związanych podczas pisania zwykłych poleceń SqlCommands.

Ale w ruchu do Entity Framework. Mniej kontroli nad instrukcjami SQL. Nie mam nic przeciwko temu, ale nie mogę przestać martwić się, gdy łączę ciąg pochodzący z przeglądarki i przekazuję go do funkcji.

Oto przykład:

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

Zrobiłem kilka testów i prześledzić rzeczywistą SQL wysyłane do serwera. Pojedyncze cytaty są automatycznie pomijane. Tak więc jest tam pewna ochrona. Występuje pewna sanityzacja. Instrukcje wstawiania używają zmiennych wiązania. Czy powinienem zadowolić się wymianą pojedynczych cytatów? Czy za kulisami dzieje się coś jeszcze?

+0

Sprawdź to. Utwórz profil db, aby dowiedzieć się, co dokładnie wygenerował SQL. –

+0

@ marvc1 Zrobiłem, tak znalazłem, że pojedyncze qoutes są ujęte w podwójne cudzysłowy. Ale nie jestem ekspertem od SQL Injection, czy to naprawdę wystarczające? –

+0

spróbuj linii 'x '; DROP TABLE tableName; - i sprawdź, czy stół jest opuszczony. Zastąp najpierw nazwę tabeli. –

Odpowiedz

3

Każdy stały, zmienny, parametr w Linq jest przekazywany jako parametr polecenia w IDbCommand, który z kolei jest chroniony przez podstawowy sterownik.

O ile nie ma błędu, wszystkie zapytania EF i funkcje pomocnicze SQL są bezpieczne przed atakami SQL injection.

Powiązane problemy