Re: [Linq2db] InsertWithIdentity и Sql Injection
От: rameel https://github.com/rsdn/CodeJam
Дата: 04.01.16 13:07
Оценка:
Здравствуйте, elcolex, Вы писали:

E>Написал, все работает. Потом присмотрелся... И думаю: а какого фига не используются bind-переменные?!..


Потому что используешь константы. Используй переменные и будут тебе параметры.

Для информации, инлайнингом параметров при использовании переменных можно управлять через свойство InlineParameters у DataConnection и DataContext.
var name = "John";
// Какой именно запрос будет сгенерирован зависит от значения свойства InlineParameters
db.Persons.Insert(() => new Person {Name = name});


E> Это был для меня прям удар в спину. Тут же ведь значения из полей модели прямо вставляются в sql. Вот это косяк!


Тебе только кажется. Все безопасно, так как строковые параметры при необходимости эскейпятся.

E>И что интересно, метод Insert генерит SQL с bind-переменными!


Вот эти методы, вызываемые напрямую у DataConnection и DataContext генерируют параметризованный sql.
db.Insert(new Person {Name = "John"});
db.InsertWithIdentity(new Person {Name = "John"});


Остальные от того, что ты используещь: константы или переменные (в последнем еще зависит от свойства InlineParameters).

E>Но он не очень удобный, потому что не возвращает ид записи.


Есть метод:
db.InsertWithIdentity(new Person {Name = "John"});
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.