Русский   English
ДонНТУ   Портал магістрів

Реферат по темі випускної роботи

Зміст

Введення

Зараз дуже популярно і корисно мати свій власний сайт, будь то блог або бізнес сайт. Потреба в них зростає так як, велика частина часу і роботи спирається на інтернет. Завжди затребувані люди, які не тільки можуть створити потрібний сайт, але і захистити його. В ході розробки сайту завжди з'являються різні проблеми: його захист і швидкодію, навантаження, з якими буде працювати сервер.

1. Постановка задачі

У будь-якому сайті або додатку присутні вразливі місця, наприклад, форма в PHP обробника. Якщо вона буде розроблена без захисту, то вона може відправити на сервер запит, скрипт, небезпечний або заражений файл, можна буде провести SQL-ін'єкцію. У таких випадках відсутня можливість втратити важливі дані або позбутися свого сайту. У процесі розробки велика частина часу, може піти на створення безпечного використання сайту.

Метою роботи є дослідження безпеки і розробка сайту, а також мобільного додатку до нього. В ході роботи буде проведено аналіз популярного framework і CMS (система управління контентом) і аналіз користувацьких рішень. В кінцевому результаті буде розроблений сайт і мобільний додаток, який можна використовувати для створення: блогу, інтернет-магазину і подібних ресурсів.

Дана розробка зможе виконувати:

  • Реєстрація\ аутентифікація користувача;
  • управління даними через адмін-панель;
  • створення власних роутингов;
  • використання можливості MVC (Model-View-Controller);
  • можливість переробки адмін панелі;
  • обробка замовлень;
  • відправка даних в додатки за власними роутінгами;

На даний момент — це не повний перелік можливостей.

2.1 Мова програмування

PHP – мова програмування, який використовують для написання веб-додатків. Дана мова постійно допрацьовується, більшість розробників використовують його для роботи. В ході доопрацювань з'явилася можливість використовувати об'єктно-орієнтоване програмування (ООП). У таблиці 1 можна побачити перелік мов, що працюють з сервером.

Таблиця 1-мови, що працюють з сервером
Название Веб-сервер
ASP Спеціалізований
ASP.NET Спеціалізований
C/C++ Практично будь-який
JAVA Множество, в том числе свободные
Perl Практично будь-який
PHP Практично будь-який
Python Практично будь-який
Ruby Практично будь-який
Node.js Власний

2.2 Система управління базами даних

PDO (PHP Data Objects) – це загальний рівень абстракції бази даних з підтримкою MySQL серед багатьох інших баз даних (БД). Він надає підготовлені заяви і значну гнучкість щодо того, як дані повертаються. Дуже добре підходить, якщо потрібно поміняти БД. Має можливість працювати з кількома БД, це дозволяє не робити, аналіз активної БД, це будуть робити спеціальні драйвера. З методів боротьби з sql-ін'єкціями з'явилося prepared. Prepared statement-це заздалегідь скомпільований SQL-вираз, який може бути багаторазово виконано шляхом відправки серверу лише різних наборів даних (на малюнку 2.5 фрагмент роботи з PDO) [7]..

2.3 Програмне забезпечення для розробки мобільного додатку

React Native розроблен для створення нативно відображуваних iOS і Android-додатків. В його основі лежить розроблена в Facebook JS-бібліотека React, призначена для створення користувацьких інтерфейсів. Даний фреймворк орієнтований не на браузер, а на мобільні платформи. При розробці програми можна використовувати React Native для написання чистих, швидких мобільних додатків, використовуючи звичну JS-бібліотеку React і єдину кодову базу JavaScript. React — це JS-бібліотека для створення користувацьких інтерфейсів для веб-додатків. React широко поширений, і на відміну від великих MVC-фреймворків вирішує відносно вузьку задачу: рендеринг інтерфейсу. React може використовуватися для розробки односторінкових і мобільних додатків. Його мета — надати високу швидкість, простоту і масштабованість. В якості бібліотеки для розробки користувацьких інтерфейсів React часто використовується з іншими бібліотеками, такими як Redux [4,5].

2.4 Архітектура MVC

Архітектура MVC дозволяє розділити код додатка на 3 частини: Модель (Model), Вид або Подання (View) і Контролер (Controller). Вперше вона була описана в 1978 році, і призначалася для додатків з графічним інтерфейсом (вікнами і кнопками), але пізніше була адаптована і для веб-додатків [3].Поділ на частини дозволяє спростити великий за обсягом код. Якщо код писати одним довгим скриптом, в ньому стає важко розібратися, і важко вносити зміни, не допустивши помилку.

MVC не прив'язана до якоїсь конкретної мови програмування, і не вимагає використання об'єктно-орієнтованого програмування або якоїсь іншої парадигми.

Поділ на частини не означає, що в коді має бути рівно 3 файли (або 3 папки з файлами, або 3 класу) з назвами model-view і controller. MVC не встановлює обмеження того, як організовувати файли з кодом. На практиці модель часто займає основний обсяг програми, і представлена у вигляді великої кількості різнотипних класів - сутностей, сервісів, класів роботи з БД і для кожного виду класів створюються окремі папки. На малюнку 1 продемонстрована передача даних в даній архітектурі.

передача данных в MVC

Рисунок 1 – передача даних в MVC Анімація: 58 кадрів; кількість повторень: 7 повторень; 16 КБ

MVC застосовна до різних видів додатків - і до серверних веб-додатків, і до десктопних (клієнтських) додатків. Різниця між ними в тому, що у веб-додатку програма отримує один запит від користувача, обробляє його, виводить результат і завершується. Якщо прийде ще один запит, буде запущена нова, незалежна копія програми для його обробки. На відміну від веб-додатків, десктопні, мобільні програми (а також написані на JavaScript додатки, які працюють на сторінці браузера) довгоживучі. Вони обробляють багато запитів від користувача і оновлюють інформацію на екрані, не завершуючись [3].

3 огляд досліджень і розробок

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

3.1 Огляд безпеки в framework

Laravel — безкоштовний framework з відкритим кодом, який популярний у веб-розробників. Даний framework призначений для розробки з використанням архітектурної моделі MVC.

На початку роботи доступні деякі методи і функції для безпеки. Зберігання паролів надає клас з ім'ям «Hash», який забезпечує безпечне кешування Bcrypt. Функція make (), яка належить даному класу приймає значення в якості аргументу і повертає хешированное значення. Хешированное значення можна перевірити за допомогою функції check().

				
	$password = Hash::make('secret');
	Hash::check('secret', $hashedPassword)
				
			

Аутентифікація користувачів в Laravel-аутентифікація користувача і виконання певних дій. Даний framework дозволяє виконати це завдання значно простіше, для цього потрібно використовувати метод Auth::attempt [1].

				
	if (Auth::attempt(array('email' => $email, 
		'password' => $password))) {
		return Redirect::intended('home');
	}
				
			

Метод Auth:: attempt приймає в якості аргументу облікові дані і порівнює їх з обліковими даними зберігаються в базі даних. Якщо дані збігаються, повертається true, в іншому випадку-false. Метод аутентифікації містить наступні способи захисту [1]:

  • Захист від CSRF (межсайтовой підробки запиту)/XSS крос-сайтового скриптинга — атаки з використанням крос-сайтового скриптинга здійснюються, коли зловмисник має можливість розмістити код JavaScript на стороні клієнта на сторінки, що переглядається іншими користувачами. Щоб захиститися від такого типу атак, завжди повинна бути перевірка на користувача дані і не допускати додавання небезпечних сигнатур
  • SQL-ін'єкції-вразливість до ін'єкцій пов'язана з вставкою нефільтрованих довільних даних Користувача в SQL-запит. За замовчуванням Laravel використовує клас об'єктів даних PHP (PDO).

3.2 Огляд безпеки в CMS

WordPress — система управління вмістом сайту з відкритим вихідним кодом; написана на PHP; сервер бази даних — MySQL; випущена під ліцензією GNU GPL версії 2. Сфера застосування-від блогів до досить складних новинних ресурсів та інтернет-магазинів [6].

Якщо розглянути базу даних WordPress в стандартній установці, то можна побачити, що всі таблиці починаються з wp_. Це дає можливість зловмиснику можливість отримати персональні дані користувача. Простий спосіб підвищити безпеку WordPress – перетворити префікс у випадкове значення.

				
	$table_prefix = 'dad34_';
				
			

За замовчуванням, якщо хтось намагається увійти на сайт з некоректними обліковими даними, WordPress повідомить з яким полем проблеми. Це дає багато інформації, оскільки CMS віддає половину того, що комусь потрібно, щоб проникнути на сайт. Щоб виправити цю проблему, потрібно додати в файл functions.php наступний код:

				
	function error_mesg ( ) { 
		return 'Login ***' ; 
	} 
	add_filter ( 'login_errors' , 
	'custom_wordpress_error_message' ) ;
				
			

Варто враховувати, що WordPress має велику базу плагінів, де завжди можна підібрати потрібний.

3.3 Стандартні рішення захисту сайту

Існують стандартні рішення, які слідують використовувати:

  • Використання ЧПУ-людино-зрозумілих URL (Uniform Resource Locator - Покажчик розміщення сайту ). Не варто використовувати URL з передачею параметрів в ньому, через передачу параметрів можна виконати SQL-ін'єкції. У тих випадках, коли потрібно передати щось серверу через URL слід його обробити [2]. Наприклад, якщо передається число можна зробити наступні $post_id = (int)$_GET[`id`]. Одним з варіантів можна обробити дані спеціальними PHP функціями: $post_id = htmlspecialchars ($_GET[`id`]);Использование ЧПУ - человеко-понятных URL ( Uniform Resource Locator - указатель размещения сайта ). Не стоит использовать URL с передачей параметров в нем, через передачу параметров можно выполнить SQL-инъекции. В тех случаях, когда нужно передать что-то серверу через URL следует его обработать [2]. Например, если передается число можно сделать следующие $post_id = (int)$_GET[`id`]. Одним из вариантов можно обработать данные специальными PHP функциями: $post_id = htmlspecialchars ($_GET[`id`]);
  • Використовувати перевірені бібліотеки і плагіни. Існують сайти і репозиторії, які дозволяють додати дані дистрибутиви через менеджерів пакетів: npm, yarn, composer і багато інших. На сайті завжди можна отримати інформацію про останню версію бібліотеки або плагіни, а також дізнатися які були зміни.
  • Налаштувати https-протокол. HTTPS (Hypertext Transport Protocol Secure) - це протокол, який забезпечує конфіденційність обміну даними між сайтом і пристроєм користувача [1]. Безпека інформації забезпечується за рахунок використання криптографічних протоколів SSL/ TLS, що мають 3 рівня захисту: шифрування, аутентифікація, збереження даних
  • Проводити валідацію форми не тільки на стороні сервера, але і в клієнтській частині.
  • Встановити капчу на сайт. Існує різні капчі, але одна з добре зарекомендували себе – це google recaptcha v3

4. Використання раніше досліджених методів для розробки

Розробляється додаток і сайт на даний момент мають деякі напрацювання. Реалізовано ЧПУ з роутингом яке можна розглянути на малюнку 2. Даний роутинг використовує регулярні вирази для URL, де перший параметр – це назва контролера, а другим параметром є action (на малюнку 3 - продемонстрований код контролера).

Пример реализации роутинга

Рисунок 2 – Приклад реалізації роутінга

Код action контроллера

Рисунок 3 – Код action контролера

Розпочато реалізацію захисту від CSRF атак. Реалізація не виконана остаточно, тому що потрібні доопрацювання в роботі з Asynchronous Javascript And Xml (AJAX) запитами. AJAX – це технологія звернення до сервера без перезавантаження сторінки. Реалізований захист не тільки дасть можливість виключити звернення з інших ресурсів, але дасть захист для роутінгів, за якими буде звертається мобільний додаток.

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

Є можливість реєстрації\ аутентифікації користувача. Користувачеві встановлюється певна роль, яка обмежує його дії на сайті. Він може змінювати свої контактні дані, пароль, email, відновити пароль, відстежувати зміни за своїм замовленням.

Було покладено початок реалізації програми, яка має можливість роботи з Application Programming Interface (API). Підключено сховище Redux для роботи з даними. Розробляється валідація для форм реистрации\ аутентифікації (приклад графічного види форм на рисунках 4.1 – 4.2). Є такі екрани для роботи: домашній, одиночний товар, реєстрація, вхід, відновлення пароля, особистий кабінет. Для переміщення між ними була налаштована навігація за допомогою бібліотеки React Navigation

Подход к унификации синтеза автоматов Мура

Рисунок 4.1 – екран реєстрації

Подход к унификации синтеза автоматов Мура

Рисунок 4.2 – екран відновлення пароля

Висновок

Розпочато розробку програми та сайту з використанням проаналізованих способів. Проведено аналіз способів безпеки на прикладі популярних framework і CMS, а також деяких стандартних способів. При написанні даного реферату магістерська робота ще не завершена. Остаточне завершення: травень 2019 року. Повний текст роботи і матеріали по темі можуть бути отримані у автора або його керівника після зазначеної дати.

Список джерел

  1. Функції безпеки // [Електронний ресурс]: webformyself
  2. Убезпечити WordPress без плагінів // [Электронный ресурс]: zacompom
  3. Архітектура MVC // [Електронний ресурс]: github
  4. React Native // [Електронний ресурс]: facebook.github
  5. Кроссплатформенность // [Електронний ресурс]: wikipedia
  6. WordPress // [Електронний ресурс]: wikipedia
  7. Різниця межд MySQL, MySQLi i PDO // [Електронний ресурс]]: stack.io