-
4
Защита от SQL (injection), sql иньекции

Защита от SQL (injection), sql иньекции

Что же такое sql injection (иньекции).

Иньекция на самом деле это лишь добавок к Вашим параметр для формирования данных.

Что бы обратиться к БД с формы (code behinde) и передать значения с контрола, если использовать самый просто PostBack, можно обратиться напрямую к контролу и отправить значение сразу в БД.

Т.е. что то похожее на:

SQL:
 
string ValueForSelect = WebControlID.Value;
sql.SelectCommand="select top(10) * from Table1 where (CellName='"+ValueForSelect+"')";
Именно в этом случае мы имеем потенциально опасную выборку для иньекции.
 
Смысл ее работы что бы в значения селекта, в нашем случае не проверенной строковой переменной "ValueForSelect", скажем наш котрол обычный TexBox, тогда в него добавляется например ");UPDATE [dbo].[BigTable] SET [Name] = '77777777777' WHERE (id='1') " и тем самым, при работе функции будет не только выбрано 10 строк согласно условию, но и обновлена таблица "BigTable" с новым значение для нужного ID.
Вариации может быть сколько угодно много, в любом случае резервные копии спасут всех))
Этот же метод может быть использован, в Get, Post запросах.
 
Бороться с этим счастьем оказалось довольно просто.
Для например Select необходимо указать каждый параметр.
Т.е. например нам необходимо выбрать из той же таблице, те же данные но уже, параметрезированно:
Code behinde:
 
string ValueForSelect = WebControlID.Value;
SqlDataSource1.SelectParameters.Clear();
SqlDataSource1.SelectParameters.Add("ID", System.TypeCode.Int32, ValueForSelect);
SqlDataSource1.SelectCommand = "select top(10) * from Table1 where (id=@ID)";
Тогда если тот же запрос- иньекция ");UPDATE [dbo].[BigTable] SET [Name] = '77777777777' WHERE (id='1') " будет направлена в наш селект, ничего не произоидет.
В таком случае можно быть уверенным что такая "дырка" будет закрыта.
 
З.ы. Описал как мог:)
Комментарии:
Комментарии отсутствуют
Добавьте Ваш комментарий
Успешно сохранено!
Закрыть окно
Загрузка Пожалуйста, подождите!
Тут будут отображаться Ваши сообщения
[Content_popup_message]
Top
Закрыть окно
Введите Ваше сообщение: