LINQ для сущностей и SQL-инъекция

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

С MSDN:

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

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

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

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

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

2 ответов


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

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

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

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


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