Korzystanie z biblioteki Dynamic LINQ (link) jest podatne na wstrzyknięcie? i (jeśli tak), w jaki sposób można temu zabezpieczyć?Czy możliwe jest zastrzyki przez dynamiczny LINQ?
Niektóre tła z Security Considerations (Entity Framework):
LINQ podmiotach ataków wtrysku:
Chociaż kompozycja zapytanie jest możliwe LINQ jednostkach, to jest wykonywane przez model obiektu API. W przeciwieństwie do zapytań SQL Entity, zapytania LINQ do Entities nie są tworzone przy użyciu manipulacji łańcuchami znaków lub konkatenacji i nie są podatne na tradycyjne ataki przy użyciu wstrzykiwań SQL .
Skoro dynamiczny SQL składa się za pomocą ciągów znaków, oznacza to, że może on być podatny na wektory wstrzykiwania? Czy LINQ do SQL automatycznie zajmie się parametryzowaniem twoich wartości w oparciu o podstawowy typ danych w bibliotece Dynamic LINQ?
Czy jest to całkowicie bezpieczne, ponieważ dynamiczne kwerendy będą wykonywane w pamięci, a nie w stosunku do SQL (negując tym samym wszelkie korzyści z indeksów SQL)?
Przez cały czas pracowałem nad zrozumieniem kodu DynamicLibrary.cs
, ale jestem pewien, że z łatwością mógłbym coś przeoczyć.
Ponieważ to pytanie dotyczy samej biblioteki Dynamic LINQ, to pytanie można uznać za odnoszące się zarówno do linq-to-sql
i linq-to-entities
(pomimo powyższego odniesienia do Entity Framework).
Dobra uwaga. Ramy nie chronią cię przed samym sobą. –
Tak więc wstrzyknięcie powodujące wyciekanie danych jest nadal możliwe, ale nadal jesteś odizolowany od incydentu "bobby tables" (dropping/alter data/delete data); to jest może spowodować, że klauzula select i where zmieni zapisy w bazie danych? – Seph
@Seph - nie, nie można zmienić rekordów, ponieważ zapytania linq nigdy nie będą tłumaczone, aby zaktualizować, wstawić lub upuścić SQL. Jedynym możliwym atakiem może być uzyskanie dostępu do nieautoryzowanych danych poprzez modyfikację filtrów "where". – Krizz