Доброго времени суток. В разрабатываемом приложении работа с данными БД происходит через запросы, формируемые следующим образом (например данный запрос):
using (SQLiteDataReader rdr = Connection.ExecuteData($"SELECT Club,ChallengeName,Place,NumberOfMedals FROM List WHERE FIO = '{comboBox1.Text}'"))
очевидно, что используемый мной метод опасен на предмет внедрения всевозможного "нежелательного" кода.
Как можно от этого обезопаситься? Единственным ли решением является создание репозитория, и собственно хранение всех запросов в фиксированном виде(хранимые процедуры)?
Хранимые процедуры также защищают от 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#
Надежными способами являются
Репозиторий и хранимые процедуры никак проблему инъекций не решают.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите что это значит (скрин), и какие способы решения есть, и соответственно из-за чего это может происходить ? Используется реклама Kidoz,...
При получении сообщения от сокета оно обрезаетсяПолучаю примерно 680,000 символов, хотя должно прийти сообщение примерно в 3 раза больше
Есть xls файл с большим количеством строкИспользую C#, библиотеку interop
ЗдравствуйтеВ программе я создаю несколько классов с наследованием