2010-08-13 3 views
5

Возможно ли, что проект, использующий полностью LinqToSQL или Entity Framewok, подвергнется SQL-инъекции.Entity Framework, LinqToSQL и sql injection

Я думаю, что, вероятно, не потому, что SQL, который генерирует ORM, должен быть без sql-инъекций. Но я не уверен.

+1

дубликатом http://stackoverflow.com/questions/473173/will-using-linq-to-sql-help-prevent-sql -инъекция –

+1

Не совсем повторяется, так как это также запрашивает Entity Framework. Также ответы на самом деле говорят, что есть возможность для атаки при некоторых обстоятельствах. –

ответ

10

Если вы используете эти рамки как предназначенные, то есть объекты/таблицы напрямую, то нет. Все строковые сравнения (то есть where name = 'smith') параметризуются.

Единственные уязвимые места являются:

  • любая строка может быть выполнена непосредственно от контекста. dbContext.ExecuteQuery(); с любой деструктивной струной.

  • хранимая процедура выполнения динамического SQL с использованием любых параметров заданного

+1

В VS2012 из коробки. _ Где (a => a.column == "Quote '") _ перевел на связанный var _ @ 1 = [Extent1]. [Column] _. И _ Where (a => a.column! = "Quote '") _ переводится на _ N'Quote' '' = [Extent1]. [Column] _ –

3

«Это зависит».

Простые запросы LINQ к объектам L2S или EF безопасны для инъекций, но вы всегда можете вызвать хранимую процедуру или функцию, которая не безопасна для инъекций.

Это, очевидно, будет краевым случаем, но бывает, что люди пишут SP/функции, открытые для инъекций (составление SQL-in-строк с значениями параметров внутри proc).