Возможна ли SQL-инъекция при использовании с EF?

Я заметил, что при использовании Contains в EF

.Where(i => myListOfStrings.Contains(i.Value))

Сгенерированный SQL выглядит следующим образом

IN ('Value1', 'Value2')

Поскольку значения не параметризованы, разве нельзя ввести какой-либо SQL?

7 голосов | спросил gsharp 8 J0000006Europe/Moscow 2016, 14:18:20

1 ответ


0

Он не просто бездумно построит оператор IN из вашего Contains. По крайней мере, он будет избегать одинарных кавычек (удваивая их). Предположим, вы хотите добавить что-то вроде «') ИЛИ 1 = 1--», как это предлагается в комментариях, при условии, что оно будет преобразовано в:

where ... IN ('') OR 1 = 1 -- the rest

Но поскольку одиночные кавычки экранированы, это будет:

where ... IN (''') OR 1 = 1 --' -- the rest

Так что мы здесь в безопасности, потому что все ваше утверждение обрабатывается как строка.

ответил Evk 8 J0000006Europe/Moscow 2016, 14:39:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132