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 (если бы я не делал что-то очень странное за кадром).