Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД_лекції_2016.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.15 Mб
Скачать

Фільтрація цілочисельних параметрів

Візьмемо інший запит:

statement:= 'SELECT * FROM users WHERE id = ' + id + ';';

У цьому випадку поле id має числовий тип, і його найчастіше не беруть в лапки. У такому випадку допомагає перевірка – якщо змінна id не є числом, запит взагалі не повинен виконуватися.

Наприклад, на Delphi для протидії таким ін'єкціям допомагає код:

id_int:= StrToInt(id);

statement:= 'SELECT * FROM users WHERE id = ' + IntToStr(id_int) + ';';

у випадку помилки функція StrToInt викличе виняток EConvertError, і в його обробнику можна буде вивести повідомлення про помилку. Подвійне перетворення забезпечує коректну реакцію на числа у форматі $132AB (шістнадцяткова система числення). На стандартному Паскалі, який не вміє обробляти виняток, код дещо складніший.

Для PHP цей метод буде виглядати так:

$query = 'SELECT * FROM users WHERE id = '. intval($id);

Усікання вхідних параметрів

Для внесення змін в логіку виконання SQL-запиту потрібно впровадження достатньо довгих рядків. Так, мінімальна довжина такого рядка у наведених вище прикладах становить 8 символів («1 OR 1=1»). Якщо максимальна довжина коректного значення параметра невелика, то одним з методів захисту може бути максимальне усікання значень вхідних параметрів.

Наприклад, якщо відомо, що поле id у вищенаведених прикладах може приймати значення не більше 9999, можна «відрізати зайві» символи, залишивши не більше чотирьох:

statement:= 'SELECT * FROM users WHERE id = ' + LeftStr(id, 4) + ';';

Використання параметризованих запитів

Багато серверів баз даних підтримують можливість відправки параметризованих запитів (підготовлені вирази). При цьому параметри зовнішнього походження відправляються на сервер окремо від самого запиту або автоматично екрануються клієнтською бібліотекою. Для цього використовують

  • на Delphi — властивість TQuery.Params;

  • на Perl — через DBI::quote або DBI::prepare;

  • на Java — через клас PreparedStatement;

  • на C# — властивість SqlCommand.Parameters;

  • на PHP — MySQLi (при роботі з MySQL), PDO.

Наприклад для Delphi:

var  sql, param: string;

begin

sql:= 'select :text as value from dual';

param:= 'alpha'; 

Query1.Sql.Text:= sql;

Query1.ParamByName('text').AsString:= param;

Query1.Open;

ShowMessage(Query1['value']); 

end;

Список рекомендованих джерел

  1. Базы данных. Интеллектуальная обработка информации / В.В. Корнеев , А.Ф. Гареев, С.В. Васютин , В.В. Райх.-М.: Нолидж, 2010, 352 с.

  2. Боуман Дж., Эмерсон С., Дарновски М. Практическое руководство по SQL. - К: Диалектика, 1997. - 320 с.

  3. Брункшир Дж. Введение в компьютерные науки. Общий обзор: Пер. с англ. - М.:Вильямс, 2011. -688 с.

  4. Гаврилова Т.А., Хорошевский В.Ф. Базы знаний интеллектуальных систем.- С.-Пб.: Питер, 2001.-384 с.

  5. Гетц К., Литвин П., Гилберт М. Access 2000. Руководство разработчика. Том 1. Настольные приложения. К.: BHV, 2000. -1264 с.

  6. Горев А., Ахаян Р., Макашарипов С. Эффективная работа с СУБД. -С.-Пб.: Питер, 1997. - 700 с.

  7. Грабер М. Введение в SQL. - М: Лори, 2010. - 379 с.

  8. Дейт К. Введение в системы баз данных. - К:Диалектика, 1998.-781 с.

  9. Джексон Г. Проектирование реляционных баз данных для использования с микроЭВМ. - М.: Мир, 1991.-252с.

  10. Карпова Т.С. Базы данных: модели, разработка, реализация. - СПб.: Питер, 2012.-304 с.

  11. Когаловский М.Р. Энциклопедия технологий баз данных. - М.: Финансы и статистика, 2002. - 800 с.

  12. Конноли Т., Бегг К., Страчан А. Базы данных: проектирование, реализация и сопровождение. Теория и практика: Пер. с англ. - М.: Издательский дом "Вильямс", 2000. - 1120 с.

  13. Мейер Д. Теория реляционных баз данных. - М.: Мир, 1987.-362с.

  14. Пасiчник В.В., Резніченко В.А. Організація баз даних та знань. - К.: Видавнича група BHV, 2006. - 384 с.: іл. ISBN 966-552-156-Х. 

  15. Пасiчник В.В. та iн. Глобальнi iнформацiйнi системи та технологiї: моделi ефективного аналiзу, опрацювання та захисту даних. Монографiя / В.В. Пасiчник, П. I. Жежнич, Р. Б. Кравець, А. М. Пелещишин, Д. О. Тарасов. Львiв: Видавництво Львiвської полiтехнiки, 2006. 348 с. ISBN: 966-553-578-1. 

  16. Полищук Ю.М., Хон В.Б. Теория автоматизированных банков информации. - М.: Высш.шк., 1989.-184с.

  17. Праг К.Н., Ирвин М.Р. Библия пользователя Access 2000. - М.: Вильямc, 2011.-1040 с.

  18. Тиори Т., Фрай Дж. Проектирование структур баз данных: в 2-х кн. Кн.1-М.:Мир, 1985.-287 с.

Бази даних та мова SQL [Текст]: конспект лекцій для студентів спеціальності 123 – «Комп’ютерна інженерія» денної та заочної форм навчання/ уклад. А.Ю. Коцюба, С.В. Лавренчук – Луцьк: Луцький НТУ, 2016. – 76 с.

Комп’ютерний набір та верстка:

А.Ю. Коцюба

С.В. Лавренчук

Редактор:

С.В. Лавренчук

(представник РВВ Луцького НТУ, інший фахівець)

Підп. до друку 2016р.

Формат 60х84/16. Папір офс. Гарнітура Таймс.

Ум. друк. арк. ___. Обл.-вид. арк. 2,5.

Тираж ___ прим. Зам. 1.

Редакційно-видавничий відділ

Луцького національного технічного університету

43018 м. Луцьк, вул. Львівська, 75

Друк – РВВ Луцького НТУ