Український нні інформаційного І телекомунікаційного забезпечення агропромислової та природоохоронної галузей економіки факультет комп’ютерних наук І економічної кібернетики

Вид материалаДокументы

Содержание


4.3 Розробка БД в середовищі phpMyAdmin
4.4 Реалізація серверних скриптів для захисту Інтернет БД.
Values ('"
Список використаної літератури
Подобный материал:
1   2   3   4   5   6   7

4.3 Розробка БД в середовищі phpMyAdmin

Перш ніж приступити до створення Бази Даних, необхідно визначитися з тим що необхідно від Бази Даних, які функції вона буде виконувати, якого типу вона буде, також потрібно приділити багато уваги створенню таблиць, визначення ключових полів та ідентифікаторів, прослідкувати за всіма зв’язками таблиць, та відношенню полів

Щоб уникнути помилок потрібно створити модель даних. За допомогою середовища ErWin, можна легко без особливих зусиль створити модель даних. Коротше кажучи це буде щось на зразок прототипу нашої бази даних. Далі за цієї моделлю даних потрібно приступити до створення Бази Даних, створюючи таблиці та стовпці, задаючи їх тип даних, та співвідношення одне до одного.

Оскільки створення бази даних буде виконуватись через певний WEB – сервер, ми будемо використовувати середу WEB – серверу під назвою «MyPHPadmin».

Спочатку нам необхідно створити базу даних, для необхідно зайти в Адмін частину, після цього побачимо наступне вікно:



Мал. 4.4 Вікно створення БД в середовищі «MyPHPadmin».

Після цього необхідно ввести назву нашої БД. Та натиснути кнопку створити. Після успішного виконання операції створення таблиці ми побачимо наступне вікно:



Мал. 4.5. Створення таблиць

Як ми бачимо з самого верху, є текст запиту для створення таблиці, адже в «MyPHPadmin» є два варіанти створення таблиць, такий який щойно ми використали, та через запит прописуючи текст вручну.

Тепер нам необхідно створити таблицю, адже кожна БД складається з таблиць, томя для цього нам необхідно в цьому ж самому вікні де знаходиться текст «Створити нову таблицю в БД 111», де назва ввести назву таблиці, а де поля ввести к-сть полів необхідних нам для нашої таблиці:



Мал. 4.6 Створення таблиці

Наступний крок буде мати вигляд створеної таблиці, але ще з не відомими атрибутами, та значеннями.

Далі необхідно в стовпчику поле, прописати назви наших полів, у стовпчику тип необхідно вибрати якого типу буду данні в цьому полі, чи текстові чи числові чи інші, адже для певних даних відповідає свій тип. Далі ми маємо стовбець з назвою «Довжина значення», тут ми можемо вказати наприклад для типу VARCHAR якої максимальної довжини можуть бути поля.



Мал. 4.7 Вигляд таблиці

У стовпці «Порівняння» нам необхідно вибрати «Кодування» для нашої таблиці, щоб в подальшому не виникало проблем з відображенням тексту із БД, на веб сторінці. В нашому випадку найкраще вибрати «UTF8_unicode_ci» він буде підтримувати звичайні українські та російські символи, для більш детального вивчення необхідно детальніше ознайомитись з усіма типами кодувань. Стопвець «Нуль » дозволяє нам вибрати чи зможуть наші записи в таблиці набувати значення “NULL”. Для значень за замовчуванням, введіть лише значення, без використання зворотніх слешів чи лапок, у такому форматі: a.

У стовпці «Додатково» ми можемо вписати що для даного поля можна присвоїти значення інкременту, адже якщо в нашому полі наприклад буде якийсь індекс, можна зробити що система сама автоматично буде збільшувати значення при кожному записі на 1.



Мал. 4.8. Задання властивостей полів
  • дозволяє нам задати первинний ключ
  • дозволяє задати полю властивість індекс
  • дозволяє задати властивість унікального поля


4.4 Реалізація серверних скриптів для захисту Інтернет БД.

Для реалізації захисту використовувались серверні скрипти, один отримує інформацію щодо даних необхідних для запиту, а інший аовертає гогтові данні для скрипту. Найпростіший приклад цього можна зобразити на при коаді запису та зчитаування розкладу який знаходиться в БД.



Мал. 4.9. Форма введення розкладу

Після того я ми ввели данні необхідно їх записати, для цього потрібно натиснути кнопку «Записати», але перед цим вказати id для цього розкладу, щоб був певний відлік, в ми знали який нам потрібен. Наприклад якщо у кожного користувача буде свій власний розклад, то за допомогою id ми зможемо визначити кому він належить, адже у рогожного користувача, навіть у одногрупники по якимось причинам розклад може бути різним. Пусті поля в базу записуються як пусті, тому якщо роглядати розклад як масив, то кожний елемент буде знаходитись на своєму місці в списку елементів масиву. Оскільки розклад писали як один рядок, тому від буде зберігатись у стовпці таблиці, є ще один варіант вирішення зберігання масивів у БД. Для цього потрібно викликати функцію serialize($array), де вхідним параметром буде наш масив, а вихідним значення в який було серіалізовано масив. Для зворотно дії використовуємо функцію unserialize($string), де вхідним параметром э рядок який до цього було серіалізовано. Після того як ми вказали всі данні для запису, натискаємо кнопку «Записати», не забуваємо вказати id розкладу.

Після того як ми натиснули запис, ми створили запит для запису данних, нам необхідно взяти назву таблиці в яку потрібно писати розклад, для цього використовуємо функцію function dsCrypt($input,$decrypt=false), де $input – це вхідна строка з назвою нашої таблиці, тобто «rozklad», якщо вказати другий параметр то буде розшифровано дану строку. Після функція повертає ось таке значення «H!CRKVE», це і є наша назва зашифрованої таблиці. Тому запит буде мати наступний вигля:


$query = "INSERT INTO `H!CRKVE` (

`monday_1`,`thuesday_1`,`wensday_1`,`thoesday_1`,`friday_1`,`saturday_1`,

`monday_2`,`thuesday_2`,`wensday_2`,`thoesday_2`,`friday_2`,`saturday_2`,

`monday_3`,`thuesday_3`,`wensday_3`,`thoesday_3`,`friday_3`,`saturday_3`,

`monday_4`,`thuesday_4`,`wensday_4`,`thoesday_4`,`friday_4`,`saturday_4`,

`monday_5`,`thuesday_5`,`wensday_5`,`thoesday_5`,`friday_5`,`saturday_5`,

`monday_6`,`thuesday_6`,`wensday_6`,`thoesday_6`,`friday_6`,`saturday_6`,

`monday_7`,`thuesday_7`,`wensday_7`,`thoesday_7`,`friday_7`,`saturday_7`,`id`)

VALUES ('";

for ($i=0; $i<=41; $i++) {

if ($i==41) {

$query.="$roz_arr[$i]','1')";

}

else $query.="$roz_arr[$i]','";

}


$query = "SELECT * FROM `gjkolvbnm` WHERE `name`='rozklad'";
Ось самий простий приклад запису в таблицю. Далі буде показано як зчитувати дані з таблиці. Для цього нам необхідно спочатку створити запит, але ми не знаємо до якої таблиці нам потрібно звертатись. Тому нам необхідно витягнути значення з іншої бази даних. Цей запит буде мати наступний вигляд:


Де gjkolvbnm - назва таблиці в якій зберігаються всі шифри до назв таблиць. Після цього отримаємо результат, назви таблиці 'rozklad'. Тепер ми отримаємо результат: він буде мати вигляд: $table_name = $line['tablica']; Ми перемістили результат в змінну $table_name, в ній знаходиться реальна назва нашої таблиці. Тому тепер побудуємо запит отримання розкладу:


$read_query = "SELECT * FROM `H!CRKVE` WHERE `id`='$id'";


Тепер у $read_query ми отримаємо результат для виводу данних з таблиці розклад.


ВИСНОВОКИ

Метою магістерської роботи було, створення та захист Інтернет баз даних. Для досягнення поставленої мети було проведено огляд середовища та складових глобальної мережі Інтернет. В даній роботі розроблена структура Інтернет-ресурсу, в якій однією з головних складових є Інтернет-БД. Для забезпечення захисту Інтренет-ресурсу було проаналізовано типи атак на даний об’єкт, в тому числі на інформацію яка розміщена в БД цього Інтернет-ресурсу.

Для створення БД Інтернет-ресурсу організації необхідно мати певне середовище, в якому можна було б реалізувати дану БД, тому було проведено аналіз інструментарних засобів, які дозволять забезпечити створення структури WEB – ресурсу.

При створенні захищеного Інтернет-ресурсу було розроблено логічну модель Інтернет – БД. Дана логічна модель була реалізована за допомогою таких інструментарних засобів як: структурованої мови MySQL.

Відповідно до атак, які можуть бути проведені на Інтернет-ресурс в даній роботі розроблено рекомендації, що забезпечують необхідний рівень захисту. До методів захисту включено один з можливих додаткових механізмів, а саме реалізавано серверний скрипт, який шифрує назви таблиць, використовуючи різні методи шифрування. Цей скрипт захищає Інтернет-БД від несанкціонованого доступ. Таким чином шифруючи назви таблиць, підставляючи ці назви в запити, які формуються, система не дозволяємо зловмиснику отримати доступ до необхідної йому інформації, оскільки зашифровані назви таблиць не дозволять вільно скористатися отриманою БД. Отже в даній магістерській дипломній роботі, були виконані наступні кроки:
  • Досліджено різні типи серверних платформ для WEB-ресурсів та для реалізації БД Інтернет-ресурсів
  • Проведено аналіз інструментальних засобів для створення WEB-ресурсів та Інтернет-БД
  • Проаналізовано можливі атаки на Інтернет-ресурси
  • Запропоновано методи захисту Інтернет-ресурсів
  • Розроблено структуру Інтернет-ресурсу
  • Запропоновано логічну модель Інтернет-БД
  • Проведено установку та конфігурування WEB-платформи
  • Реалізовано фізичну моделі Інтернет-БД
  • Проведена реалізація серверних та клієнтських скриптів
  • Розроблено додатковий скрипт захисту Інтернет БД.



СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
  1. Пархоменко І.І., Гамрецький Я.І. "Проектування захищених баз даних Інтернет-ресурсів організації" // Актуальні проблеми наук про життя та природокористування: 26-29 жовтня 2011, Тези доповідей міжнародної науково-практичної конференції молодих вчерних - К:2011. - С 196-197
  2. Дмитрий Котеров, Алексей Костарев PHP. В подлиннике — Спб.: «БХВ-Петербург», 2005. — С. 1120. — ISBN 5-94157-245-Х.
  3. Костарев А. Ф. PHP 5 — Спб.: «БХВ-Петербург», 2008. — С. 1104..
  4. Мэтт Зандстра PHP: объекты, шаблоны и методики программирования, 3-е издание = PHP Objects, Patterns and Practice, Third Edition — М.: «Вильямс», 2010. — С. 560.
  5. Кристиан Дари, Эмилиан Баланеску PHP и MySQL: создание интернет-магазина = Beginning PHP and MySQL E-Commerce: From Novice to Professional — М.: «Вильямс», 2010.
  6. Джейсон Ленгсторф PHP и jQuery для профессионалов = Pro PHP and jQuery — М.: «Вильямс», 2010. — С. 352.
  7. Стив Суэринг, Тим Конверс, Джойс Парк PHP и MySQL. Библия программиста, 2-е издание = PHP 6 and MySQL 6 Bible — М.: «Диалектика», 2010. — С. 912.
  8. Квентин Зервас Web 2.0: создание приложений на PHP = Practical Web 2.0 Applications with PHP — М.: «Вильямс», 2009. — С. 544.
  9. Стив Суэринг, Тим Конверс, Джойс Парк PHP и MySQL. Библия программиста, 2-е издание = PHP 6 and MySQL 6 Bible — М.: «Диалектика», 2010. — 912 с.
  10. Роберт Шелдон, Джоффрей Мойе MySQL 5: базовый курс = Beginning MySQL — М.: «Диалектика», 2007. — 880 с.
  11. Кузнецов Максим, Симдянов Игорь MySQL на примерах — Спб.: «БХВ-Петербург», 2008. — С. 952.
  12. Поль Дюбуа MySQL, 3-е издание = MySQL, 3ed — М.: «Вильямс», 2006. — 1168 с.
  13. Спартак Марк, Паппас Френк и др. Компьютерние сети и сетевые технологии: Пер. с англ. - К. :ООО «ТИД «ДС»», 2002.- 736с.
  14. Домарев В.В. «БИТ. Методология создания СЗИ» – СПб.: Питер, 2005. – 296 с. : ил.
  15. Домарев В.В. «Безопасность ИТ» – СПб.: Питер, 2003. – 126 с. : ил.
  16. Н. Польман «Архитектура брандмауэров для сетей предприятия» Изд. "Яхтсмен", 2000.
  17. Реббека Бейтс «Введение в обнаружение атак и анализ защищенности» : Пер. с англ. - К. :ООО «ТИД «ДС»», 2002.- 736с.
  18. Медведовский И.Д. Семьянов П.В. «Атаки через Internet»
  19. Гайкович В., Першин А.. Безопасность электронных банковских систем., Изд. "Единая Европа", 1994.
  20. Ростовцев А. Г. Элементы Криптологии, Изд. СПбГТУ
  21. Клименко С., Уразметов В., Internet. Среда обитания информационного общества, Российский Центр Физико-Технической Информатики, 1995
  22. Крис Касперски Компьютерные вирусы изнутри и снаружи — Питер. — СПб.: Питер, 2006. — С. 527.
  23. Stephen Northcutt, Mark Cooper, Matt Fearnow, Karen Frederik Анализ типовых нарушений безопасности в сетях = Intrusion Signatures and Analysis — New Riders Publishing (англ.) СПб.: Издательский дом «Вильямс» (русск.), 2001. — С. 464.
  24. Саломаа А. Криптография с открытым ключом — М.: Мир, 1995. — 318 с.



Додаток А (Скрипт шифрування)

function dsCrypt($input,$decrypt=false) {

$o = $s1 = $s2 = array(); // Arrays for: Output, Square1, Square2

// формируем базовый массив с набором символов

$basea = array('?','(','@',';','$','#',"]","&",'*'); // base symbol set

$basea = array_merge($basea, range('a','z'), range('A','Z'), range(0,9) );

$basea = array_merge($basea, array('!',')','_','+','|','%','/','[','.',' ') );

$dimension=9; // of squares

for($i=0;$i<$dimension;$i++) { // create Squares

for($j=0;$j<$dimension;$j++) {

$s1[$i][$j] = $basea[$i*$dimension+$j];

$s2[$i][$j] = str_rot13($basea[($dimension*$dimension-1) - ($i*$dimension+$j)]);

}

}

unset($basea);

$m = floor(strlen($input)/2)*2; // !strlen%2

$symbl = $m==strlen($input) ? '':$input[strlen($input)-1]; // last symbol (unpaired)

$al = array();

// crypt/uncrypt pairs of symbols

for ($ii=0; $ii<$m; $ii+=2) {

$symb1 = $symbn1 = strval($input[$ii]);

$symb2 = $symbn2 = strval($input[$ii+1]);

$a1 = $a2 = array();

for($i=0;$i<$dimension;$i++) { // search symbols in Squares

for($j=0;$j<$dimension;$j++) {

if ($decrypt) {

if ($symb1===strval($s2[$i][$j]) ) $a1=array($i,$j);

if ($symb2===strval($s1[$i][$j]) ) $a2=array($i,$j);

if (!empty($symbl) && $symbl===strval($s2[$i][$j])) $al=array($i,$j);

}

else {

if ($symb1===strval($s1[$i][$j]) ) $a1=array($i,$j);

if ($symb2===strval($s2[$i][$j]) ) $a2=array($i,$j);

if (!empty($symbl) && $symbl===strval($s1[$i][$j])) $al=array($i,$j);

}

}

}

if (sizeof($a1) && sizeof($a2)) {

$symbn1 = $decrypt ? $s1[$a1[0]][$a2[1]] : $s2[$a1[0]][$a2[1]];

$symbn2 = $decrypt ? $s2[$a2[0]][$a1[1]] : $s1[$a2[0]][$a1[1]];

}

$o[] = $symbn1.$symbn2;

}

if (!empty($symbl) && sizeof($al)) // last symbol

$o[] = $decrypt ? $s1[$al[1]][$al[0]] : $s2[$al[1]][$al[0]];

return implode('',$o);

}


(Скрипт для читання з БД )

//Получаем зашифрованое название талицы

mysql_connect("localhost", "root", "") or die("Could not connect");

mysql_select_db("test_db_enc") or die("Could not select database");

$query = "SELECT * FROM `gjkolvbnm` WHERE `name`='rozklad'";

$result = mysql_query($query) or die("Query failed");

$line = mysql_fetch_array($result, MYSQL_ASSOC);


$table_name = $line['tablica'];

mysql_free_result($result);

mysql_close();

// Делаем запрос на вывод данных

$read_query = "SELECT * FROM `H!CRKVE` WHERE `id`='$id'";

mysql_connect("localhost", "root", "") or die("Could not connect");

mysql_select_db("test_db") or die("Could not select database");

echo "
";

$result = mysql_query($read_query);

$record = mysql_fetch_array($result, MYSQL_ASSOC);


$i=1;

echo "";

foreach ($record as $k=>$v) {

$v = $v ? $v : " ";

echo "";

if ($i%6==0) {

echo "";

}

if ($i==42) { echo "";

break;

}

$i++;

}

echo "
".$v."
";

echo $read_query;

echo "
";


mysql_free_result($result);

mysql_close();

(Скрипт для запису в БД )


$query = "INSERT INTO `H!CRKVE` (

`monday_1`,`thuesday_1`,`wensday_1`,`thoesday_1`,`friday_1`,`saturday_1`,

`monday_2`,`thuesday_2`,`wensday_2`,`thoesday_2`,`friday_2`,`saturday_2`,

`monday_3`,`thuesday_3`,`wensday_3`,`thoesday_3`,`friday_3`,`saturday_3`,

`monday_4`,`thuesday_4`,`wensday_4`,`thoesday_4`,`friday_4`,`saturday_4`,

`monday_5`,`thuesday_5`,`wensday_5`,`thoesday_5`,`friday_5`,`saturday_5`,

`monday_6`,`thuesday_6`,`wensday_6`,`thoesday_6`,`friday_6`,`saturday_6`,

`monday_7`,`thuesday_7`,`wensday_7`,`thoesday_7`,`friday_7`,`saturday_7`,`id`)

VALUES ('";

for ($i=0; $i<=41; $i++) {

if ($i==41) {

$query.="$roz_arr[$i]','1')";

}

else $query.="$roz_arr[$i]','";

}

mysql_connect("localhost", "root", "")

or die("Could not connect");

mysql_select_db("test_db") or die("Could not select database");

mysql_query($query) or die("Query failed");

mysql_close();