Українська   English
ДонНТУ   Портал магистров

Реферат по теме выпускной работы

Содержание

Введение

Сейчас очень популярно и полезно иметь свой собственный сайт, будь то просто блог или бизнес сайт. Потребность в них растет так как., в наше время большая часть времени и работы опирается на интернет. Всегда востребованы люди, которые не только могут создать нужный сайт, но и защитить его. В ходе разработки сайта всегда появляются различные проблемы: его защита и быстродействие, нагрузки, с которыми будет работать сервер.

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

В любом сайте или приложении присутствуют уязвимые места, например, форма в PHP обработчике. Если она буде разработана без защиты, то она может отправить на сервер запрос, скрипт, опасный или заражённый файл, можно будет произвести SQL-инъекцию. В таких случаях отсутствует возможность потерять важные данные или лишиться своего сайта. В процессе разработки большая часть времени, может уйти на создание безопасного использования сайта.

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

Данная разработка сможет выполнять следующие:

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

На данный момент — это не полный перечень возможностей.

2. ТЕХНИЧЕСКОЕ ОБЕСПЕЧЕНИЕ

Программное обеспечение (ПО) выполняет важную роль в разработке, т.к. в зависимости от выбранного ПО будет зависеть работа на стороне сервера. Для разработки будет использоваться следующее: Expo\ React Native, PHP, PDO, JS/JQ, HTML, CSS, Redux, Bootstrap, Apache, архитектура MVC, система контроля версий Git.

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].

Разделение на части позволяет упростить большой по объему код. Если код писать одним длинным скриптом, в нем становится тяжело разобраться, и тяжело вносить изменения, не допустив ошибку.

Разделение на части не значит, что в коде должно быть ровно 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`]);
  • Использовать проверенные библиотеки и плагины. Существуют сайты и репозитории, которые позволяют добавить данные дистрибутивы через менеджеров пакетов: 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, а также некоторых стандартных способов. При написании данного реферата магистерская работа еще не завершена. Окончательное завершение: май 2020 года. Полный текст работы и материалы по теме могут быть получены у автора или его руководителя после указанной даты.

Список источников

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