SQL-инъекции, как бороться?

211
04 апреля 2018, 08:08

Доброго времени суток. В разрабатываемом приложении работа с данными БД происходит через запросы, формируемые следующим образом (например данный запрос):

using (SQLiteDataReader rdr = Connection.ExecuteData($"SELECT Club,ChallengeName,Place,NumberOfMedals FROM List WHERE FIO = '{comboBox1.Text}'"))

очевидно, что используемый мной метод опасен на предмет внедрения всевозможного "нежелательного" кода.

Как можно от этого обезопаситься? Единственным ли решением является создание репозитория, и собственно хранение всех запросов в фиксированном виде(хранимые процедуры)?

Answer 1

Хранимые процедуры также защищают от SQL инъекций (если не исполнять внутри процедуры динамический SQL, используя execute, sp_executesql, и т.д.), как и параметризованные SQL запросы. Параметры процедур используются вместо литералов. SQL инъекция в этом случае не отработает и, скорее всего, вызовет ошибку или не вернет искомые данные.

Пример (SQL Server):

CREATE PROCEDURE dbo.getDetails @FIO nvarchar(100)
AS
SELECT Club,ChallengeName,Place,NumberOfMedals
FROM List
WHERE FIO = @FIO 
GO

Даже если передать в в качества параметра строку:

"'Иванов'; DROP TABLE students;"

, то комманда DROP TABLE ... не выполнится.

PS ссылка на документацию об использовании параметров в хранимых процедурах в для C#

Answer 2

Надежными способами являются

  • Параметризация запросов
  • Использование ORM

Репозиторий и хранимые процедуры никак проблему инъекций не решают.

READ ALSO
Частое пробуждение Alarm Manager Google Play

Частое пробуждение Alarm Manager Google Play

Подскажите что это значит (скрин), и какие способы решения есть, и соответственно из-за чего это может происходить ? Используется реклама Kidoz,...

192
WebSocket получение большого сообщения

WebSocket получение большого сообщения

При получении сообщения от сокета оно обрезаетсяПолучаю примерно 680,000 символов, хотя должно прийти сообщение примерно в 3 раза больше

245
С# и Excel - Копирование диапазона ячеек в массив

С# и Excel - Копирование диапазона ячеек в массив

Есть xls файл с большим количеством строкИспользую C#, библиотеку interop

221
C# Ошибка во время инициализации элементов объекта

C# Ошибка во время инициализации элементов объекта

ЗдравствуйтеВ программе я создаю несколько классов с наследованием

267