Обеспечивает ли ExecuteCommand LINQ защиту от атак SQL-инъекций?

StackOverflow https://stackoverflow.com/questions/157924

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня возникла ситуация, когда мне нужно использовать метод ExecuteCommand LINQ для запуска insert.

Что-то вроде (упрощенное для целей этого вопроса):

object[] oParams = { Guid.NewGuid(), rec.WebMethodID };

TransLogDataContext.ExecuteCommand (
"INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})",
oParams);

Вопрос в том, является ли это доказательством SQL-инъекции таким же образом, как параметризованные запросы?

Это было полезно?

Решение

Провел кое-какие исследования, и я нашел это:

В моем простом тестировании это выглядит следующим образом параметры, переданные в методах ExecuteQuery и ExecuteCommand , автоматически кодируются SQL на основе предоставляемого значения.Итак, если вы передадите строку с символом ' , она автоматически экранирует ее в SQL ".Я полагаю, что аналогичная политика используется для других типов данных таких как DateTimes, десятичные дроби и т.д.

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
(Вам нужно прокрутить страницу вниз, чтобы найти его)

Мне это кажется немного странным - большинству других.Сетевые инструменты знают лучше, чем что-либо "экранировать SQL";вместо этого они используют реальные параметры запроса.

Другие советы

Использование LINQ для SQL exec_sql с параметрами, что намного безопаснее, чем объединение в специальную строку запроса.Это должно быть так же безопасно при внедрении SQL, как использование SqlCommand и его коллекции Paramaters (фактически, это, вероятно, то, что LINQ to SQL использует внутренне).С другой стороны, насколько это безопасно это?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top