LINQ to Entities и SQL-инъекция - PullRequest
       55

LINQ to Entities и SQL-инъекция

10 голосов
/ 03 февраля 2010

Я видел пару противоречивых статей о том, чувствителен ли 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 ]

9 голосов
/ 03 февраля 2010

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

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

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

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

3 голосов
/ 03 февраля 2010

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

...