LINQ to Entities и SQL Injection

Я видел пару противоречивых статей о том, является ли L2E восприимчивым к SQL-инъекции.

От MSDN:

Хотя состав запросов возможен в LINQ to Entities, он выполняется через API объектной модели. В отличие от SQL запросов SQL, Запросы LINQ to Entities не составлены с помощью строковых манипуляций или конкатенации, и они не восприимчивы к традиционному SQL инъекции.

Означает ли это, что существуют "нетрадиционные" атаки, которые могут работать? В этой статье есть один пример непараметрированного запроса - можно ли предположить, что если вы передадите данные, предоставленные пользователем через переменную, это будет параметризироваться?

Если я это сделаю:

from foo in ctx.Bar where foo.Field = userSuppliedString select foo;

Я в безопасности?

Ответ 1

В вашем примере вы используете переменную (userSuppliedString), поэтому она будет параметризоваться.

Если у вас есть буквальное значение в вашем коде:

from foo in ctx.Bar where foo.Field == "Hi" select foo;

... тогда EF 1 не будет параметризовать его, но также существует и нулевая опасность SQL-инъекции, поскольку он является литералом.

Ответ 2

Удачи, пытаясь заставить кого-нибудь сказать вам, что определенный фрагмент кода не имеет определенной уязвимости безопасности. При этом я лично не был бы обеспокоен атаками SQL Injection через вектор запроса LINQ (если бы я не делал что-то очень странное за кадром).