Я видел несколько конфликтующих статей о том, восприимчив ли L2E к Внедрению SQL.
Из MSDN:
Хотя состав запроса возможен в LINQ к Объектам, он выполняется через объектную модель API. В отличие от SQL-запросов Объекта, LINQ к запросам Объектов не составлены при помощи обработки строк или конкатенации, и они не восприимчивы к традиционным атакам с использованием кода на SQL.
Это подразумевает, что существуют "нетрадиционные" нападения, которые могут работать? Эта статья имеет один пример непараметризированного запроса - действительно ли безопасно предположить, что, если Вы передаете в предоставленных пользователями данных через переменную, они будут параметризованы?
Если я делаю:
from foo in ctx.Bar where foo.Field = userSuppliedString select foo;
действительно ли я в безопасности?
В вашем примере вы используете переменную (userSuppliedString
), поэтому она будет параметризована.
Если в Вашем коде было литеральное значение:
from foo in ctx.Bar where foo.Field == "Hi" select foo;
...то EF 1 его не параметрирует, но и здесь нет опасности SQL-инъекции, так как это литерал.
Удачи в попытках заставить кого-нибудь сказать, что определенный кусок кода не имеет определенной уязвимости в безопасности. При этом лично меня не волновали бы атаки SQL Injection через вектор запроса LINQ (если только я не делал что-то очень причудливое за кулисами).