Глава 1. Предпроектное исследование и анализ предпроектной ситуации
Введение
Одной из самых востребованных возможностей современных информационных технологий, является возможность хранения информации. Однако с другой стороны, эта возможность создает проблему анонимности и безопасности для информации в сети.
Например по данным “SearchInform” в 2016 году от утечек конфиденциальных данных пострадали 49%, российских компаний.
Согласно индексу критичности утечки данных Gemalto (Breach Level Index), в 2016м году по всему миру было зафиксировано более полутора тысяч инцидентов утечки информации, которые привели к компрометации более миллиарда записей данных. Например в России, самой крупной среди них является атака на сервис Mail.ru получившая 9 баллов по Индексу критичности утечек. В результате этой атаки было скомпрометировано более 20ти миллионов записей, включавших в себя данные об именах пользователей, зашифрованные пароли, IP-адреса, а также их телефонные номера.
Сегодня с каждым днем растет количество каналов, потенциально уязвимых для утечек информации в сети, в обиход приходят новые сервисы доставки мгновенных сообщений, многие из которых используются компаниями для передачи важных данных. Такое обилие способов передачи информации в сети порождает все большее количество ухищрений в виде способов воровства информации.
В таких условиях возникает большая необходимость в сервисах и средствах для защиты информации, использование которых будет существенно минимизировать риски утечек данных в сети.
Востребованность темы подтверждается перспективностью стремительного перехода компаний к использованию электронного документооборота.
На основании этого возникает потребность в создании сервиса для передачи приватных сообщений в сети, использующим шифрование данных.
Цель работы – создание сервиса приватных сообщений. В связи с поставленной целью требуется решить следующие задачи:
1. Анализ существующих сервисов для доставки приватных сообщений.
2. Разработка веб-сервиса.
3. Сравнение существующих и созданного сервисов.
4. Общая оценка работы сервиса.
Глава 1. Предпроектное исследование и анализ предпроектной ситуации
Анализ существующих разработок
На сегодняшний день существуют ряд сервисов, предназначенных для отправки приватных сообщений. Ниже приведена таблица анализа наиболее популярных платформ по следующим критериям: функциональность, кроссплатформенность, простота использования.
Таблица 2 - Сравнение сервисов
Функциональное требование | privnote | Temp.pm | wickr |
Наличие кроссплатформенности или веб-интерфейса | Да | Да | Нет |
Наличие открытого исходного кода | Нет | Нет | Нет |
Шифрование передаваемых данных | Нет | Нет | Да |
Наличие сведений о том, что сервис не сохраняет логи. | Нет | Нет | Нет |
HTTPS/TLS соединение | Нет | Да | Нет |
Наличие выделенного сервера | Нет | Да | Да |
Доступ к информации по парою | Да | Да | Нет |
На основании проведенного анализа, можно сделать вывод, что существующие на данный момент сервисы не полностью удовлетворяют требованиям, необходимым для решения поставленных задач. Как видно из таблицы 1, ни один сервис отправки приватных сообщений не имеет подходящего шифрования данных. Некоторые из них не имеют открытого исходного кода, а также не указывают на отсутствие логирования. Учитывая недостаточность функционала решением данных проблем является разработка нового сервиса доставки приватных сообщений, который будет иметь следующий возможности:
— наличие веб-интерфейса;
— открытый исходный код;
— шифрование передаваемых данных;
— отсутствие логирования;
— доступ к информации по паролю.
Обоснование необходимости разработки сервиса
Опираясь на анализ современных сервисов отправки приватных сообщений можно выделить ряд недостатков:
1. Наличие логирования.
2. Отсутствие веб-платформы.
3. Отсутствие шифрования данных.
4. Отсутствие открытого исходного кода.
Решением данных проблем будет создание нового сервиса приватных сообщений, не сохраняющего логи, а так же шифрующего передаваемые данные, кроме того использующего простую и удобную веб-платформу.
Требования к структуре и функционированию
1.5.1.1 Перечень подсистем, их назначение и основные характеристики
Сервис предполагает использование подсистемы Добавление сообщения в базу данных. Назначением этой подсистемы является фильтрация и сбор данных полученных от сервера. Основными характеристиками являются, хранение в бд, данных о наличии оставленного сообщения и зашифрованном пароле.
1.5.1.2 Требования к способам и средствам связи для информационного обмена между компонентами системы
Обмен данными в системе должен происходить с помощью базы данных MySQL.
1.5.1.3 Требования к характеристикам взаимосвязей системы со смежными системами
Программно-технические средства реализовываемого сервиса должны соответствовать стандартам сети Интернет и поддерживать безопасный прием и передачу данных по протоколу прикладного уровня HTTP с расширением HTTPS. Сервер должен иметь поддержку языка PHP версии не ниже чем 5.4 и иметь удаленный доступ к серверу через протокол SSH. Клиентская часть должна поддерживать формат передачи данных JSON, а так же язык JavaScript.
Программное обеспечение сервиса должно быть совместимо со следующими технологиями: aдаптивная верстка, асинхронные запросы на удаленный сервер.
Технические требования к вышеперечисленным функциям будут определены на стадии технического проекта.
1.5.1.4 Требования к режимам функционирования
Разрабатываемая система должна функционировать в штатном режиме, однако допускается недолгий переход в сервисный режим для устранения неполадок, диагностики и технического обслуживания.
1.5.1.5 Требования к надежности
Сервис всегда должен быть доступен клиенту, за исключением технических работ, о которых администрация сервиса сообщает заранее. Кроме того система должна быть защищена от уязвимостей: SQL-инъекций, ISE, Directory Indexing. Сервис также должен уведомлять пользователя об вводе информации неверного формата.
1.5.1.6 Требования безопасности
Требования безопасности предполагают обеспечение безопасности при обслуживании технических средств в дата-центрах сервера. Технические средства используемые при обслуживании системы должны соответствовать действующим нормам и правилам техники безопасности. Квалификационная группа по электробезопасности, обслуживающая систему должна быть не ниже III, однако персонал, работающий исключительно с компьютерами должен обладать квалификацией не ниже II.
1.5.1.7 Требования к эргономике и технической эстетике
Взаимодействие пользователей с системой должно осуществляться посредством визуального графического интерфейса (GUI). Ввод-вывод данных, прием управляющих команд и отображение результатов их исполнения должны выполняться в интерактивном режиме, в реальном времени. Интерфейс должен соответствовать современным эргономическим нормативам: ГОСТ 12.2.049, ГОСТ 30.001, ГОСТ 20.39.108, ГОСТ 21958 и ГОСТ 50948 (для пользователей с мониторами ЭЛТ).
Страницы пользовательского интерфейса должны разрабатываться с учетом требований унификации:
- панели навигации должны располагаться одинаково на всех страницах платформы;
- элементы интерфейса должны быть разделены в логические блоки, для простоты восприятия.
- важные элементы интерфейса должны располагаться на видимой части экрана и должны быть выделены соответвующим образом.
Интерфейс должен обеспечивать комфортный доступ к основным функциям и операциям, выполняемым подсистемами.
Интерфейс должен быть рассчитан на пользователей стационарных устройств, однако также должен обладать адаптивностью – возможностью удобно подстраиваться под любое мобильное устройство или компьютер с нестандартной диагональю экрана. Функциональное управление системой предполагается с помощью кнопок, вкладок, лайтбоксов и вспомогательных модальных окон. Ввод и вывод данных должен осуществляться с помощью полей ввода и вывода соответственно.
1.5.1.8 Требования к эксплуатации, техническому обслуживанию, ремонту и хранению компонентов системы
Для эксплуатации разрабатываемой информационной системы необходимы следующие условия:
1) подключение к глобальной сети интернет с минимальной скоростью прередачи данных 1Mб/c.
2) со стороны пользователя выдвигаются следующие требования к браузерам: Internet Explorer версии не ниже 9.0, Google Chrome версии не раньше 12.0 , Opera версии не ниже 18.0, Firefox версии не ниже 16.0, Safari начиная с версии 6.0.
3) электропитание технических средств от сети напряжением 220 В с частотой 50 Гц с глухо–заземленной нейтралью;
4) физическая защита аппаратных компонентов системы.
1.5.1.9 Требования к защите информации от несанкционированного доступа
Разрабатываемый сервис должен обеспечивать защиту от несанкционированного доступа к передаваемой информации и данным пользователей.
Компоненты подсистемы защиты от НСД должны обеспечивать:
— передачу данных пользователей по HTTPS и SSH;
— проверку вводимых пользователем данных;
— фильтрацию входящих и исходящих запросов;
— проверку типа информации, которою клиент передает через поле ввода;
— blowfish шифрование полученной информации для хранении в базе данных;
1.5.1.10 Требования по сохранности информации при авариях
Система должна обладать процедурой восстановления требуемого объема информации по всем уровням иерархии после восстановления, а также должна обеспечивать резервное копирование баз данных на внешние носители.
Программное обеспечение серверной части системы должно автоматически восстанавливать ее функционирование после аварии.
1.5.2 Требования к функциональности системы
Сервис должен принимать текст, полученный в форме ввода с указанием параметра в виде пароля, из полученной информации генерировать уникальный ключ, который в последствии должен шифроваться через bcrypt для дальнейшего занесения в базу данных. Пользователь должен получить уникальную ссылку, после перехода по которой клиент получает переданную ранее, дешифрованную информацию из базы данных. Также программа должна основываясь на полученных данных отправлять запросы на удаленный сервер и выдавать статус выполнения задачи.
1.5.3 Требования к видам обеспечения
1.5.3.1 Требования к информационному обеспечению
База данных должна соответствовать требованиям нормализации не ниже 2 нормальной формы. Также база данных должна быть целостна и связана по ключам.
Все подсистемы связаны между собой общим набором данных находящихся в базе данных.
1.5.3.2 Требования по применению в системе языков высокого уровня
При разработке сервиса используется язык программирования – PHP, с использованием фреймворка Yii2
1.5.3.3 Требования к программному обеспечению
Разрабатываемая платформа должна базироваться на удаленных серверах со стеком LAMP(linux nginx MySql PHP). Сервер должен иметь подключение по протоколу SSH, также на сервере должна быть подключаемая библиотека Curl. Cо стороны пользователя выдвигаются следующие требования к браузерам: Internet Explorer версии не ниже 9.0, Google Chrome версии не раньше 12.0 , Opera версии не ниже 18.0, Firefox версии не ниже 16.0, Safari начиная с версии 6.0.
1.5.4 Требования к техническому обеспечению
Для нормального функционирования веб-платформы сервер должен иметь приблизительные характеристики:
- Платформа Linux, Windows;
- Операционная система: Ubuntu 16.04.2 x64;
- Процессор Intel Xeon 1 CPU ;
- Тактовая частота 2.4 Ghz;
- Оперативная память (RAM) 512Mb DDR3;
- Защита от DDOS-атак;
1.5.5 Требования к метрологическому обеспечению
Требований к метрологической совместимости технических средств системы не предъявляется.
1.5.6.Требования к организационному обеспечению
К работе с платформой должны допускаться лица имеющие базовый уровень компьютерной грамотности, ознакомленные с правилами эксплуатации системы.
Глава 2. Проектная часть
Проектирование сервиса
На сегодняшний день, одной из самых актуальный проблем в области IT-технологий, является проблема безопасности информации в сети интернет. Информационная безопасность, это состояние, при котором информация является защищенной, обеспеченна безопасность ее целостности, конфиденциальности и доступности. Такое состояние можно охарактеризовать следующими пунктами:
— Аутентификация – процесс при котором пользователь будет распознан, после чего ему будут выданы определенные права.
— Целостность – состояние информации при котором сохраняется ее изначальное содержание. В частности, под этим понимают идентичность отправленных данных с принятыми.
— Секретность – защита от несанкционированного перехвата данных.
Одним из основных методов обеспечения информационной безопасности является криптография. Криптоанализ и криптография вместе составляют науку криптологию, занимающуюся вопросами шифрования и дешифрования данных.
Шифрование данных – обратимое преобразование информации в целях её защиты от неавторизованных лиц. Шифрование данных защищает информацию и в тоже время создает условие, при котором попадание такой информации в руки злоумышленника не принесет ему никакой ценности.
Шифрование данных происходит по определенному алгоритму. В современном мире их принято разделять на три группы:
— алгоритмы симметричного шифрования;
— алгоритмы ассиметричного шифрования;
— алгоритмы хэш-функций.
В алгоритмах симметричного шифрования, для дешифрования и шифрования данных используется один и тот же ключ. Основными требованиями в симметричных алгоритмах являются:
- полное уничтожение всех статистических закономерностей;
- отстутствие линейности.
Симметричные алгоритмы разделяются на блочные и поточные.
Блочные системы разбивают данные на блоки для дальнейшего преобразования с помощью ключа.
В поточных системах шифрование происходит потоком, по мере генерации выходной гаммы.
Рисунок 4 — Пример схемы с использованием
симметричного алгоритма
Алгоритмы асимметричного шифрования, используют два ключа, секретный и открытый. При таком алгоритме открытый ключ используется для шифрования данных и проверки электронной подписи, а секретный для создания цифровой подписи и дешифрования.
Хэширование преобразовывает информацию произвольной длины в строку или целочисленный элемент. Хэширование является односторонним процессом, это означает, что произвести обратное преобразование практически невозможно.
Простейшим примером хэширование является PHP функция md5().
Рисунок 5 — Пример применения функции md5()
После применения функции мы получаем строку размером 32 символа. Можно помещать в функцию строки и числа любой длины, однако на выходе мы всегда имеем результат в 32 символа. Это подтверждает односторонность хэширования.
В требованиях мы обозначили наличие шифрования данных для обеспечения их сохранности в процессе работы системы. Для выбора подходящего алгоритма шифрования произведен анализ современных алгоритмов. В виду некоторой специфичности задачи, состоящей в приоритете скорости шифрования и увеличенному объему шифруемой информации рассмотрим только симметричные алгоритмы.
Сравнение алгоритмов шифрования приведено в таблицах 3, 4.
Таблица 3 — параметры алгоритмов шифрования
Алгоритм шифрования | Размер ключа, бит | Длина блока, бит | Число циклов | Основные операции |
DES | Подстановка, перестановка, сумма. | |||
IDEA | Умножение по модулю 216+1, сложение по модулю 216 , кольцевая сумма | |||
Blowfish | 32-448 | Сложение по модулю 232, подстановка, кольцевая сумма | ||
ГОСТ 28147-89 | Сложение по модулю 232, перестановка, кольцевая сумма, циклический сдвиг. |
Таблица 4 — сравнительные характеристики скорости алгоритмов шифрования на Intel Xeon 1 CPU 2.4 GHz
Алгоритм шифрования | Число циклов на раунд | Число раундов | Число циклов на зашифрованный байт | Примечания |
DES | Размер ключа 56 бит | |||
IDEA | Размер ключа 128 бит | |||
Blowfish | Размер ключа 448 бит | |||
ГОСТ 28147-89 | Размер ключа 256 бит |
Как видно из таблиц, алгоритм blowfish идеально подходит для систем, где на одном и том же ключе шифруются большие массивы данных, этот алгоритм имеет лучшую скорость шифрования, кроме того определенным преимуществом будет то, что он является свободно распространяемым. На основании этих выводов остановим свой выбор именно на этом алгоритме.
Пароль создается с помощью функции http://php.net/manual/ru/function.password-hash.php
Пароль расшифровывается с помощью http://php.net/manual/ru/function.password-verify.php
К указанному паролю перед хешированием добавляется случайная строка (соль). Таким образом, у двух пользователей с паролем «123456» будут разные соли «соль1» и «соль2», а соответственно и хеш-функции от «123456соль1» и «123456соль2» в базе тоже будут разные.
Проектирование базы данных
В качестве СУБД была выбрана система MySQL. В базе данных будут храниться записи о данных передаваемых пользователями полученных от удаленного сервера.
Структура базы данных предполагает наличие следующих таблиц(сущностей): уникальный ключ сообщения, текст сообщения, зашифрованный пароль.
Таблица 3 – Структура БД
Название | Назначение |
uid | Уникальный ключ сообщения |
password_hash | Зашифрованный пароль |
body | Зашифрованный текст сообщения |
Разберем на примере ссылки http://whispr.in/GIO7IqbXjjdlwi4F!A03qf5Cq.
Строка GIO7IqbXjjdlwi4F – генерируемый, уникальный ключ записи (uid). Как можно заметить ссылка делиться на две части знаком “!”, A03qf5Cq в данном случае – это пароль сгенерированный автоматически, если пользователь не ввел свой пароль. Из формы ввода текста на сайте, пользователь отправляет текст сообщения (body) на сервер, генерируется уникальный ключ записи (uid), генерируется пароль (password_hash), затем все это шифруется через функцию bcrypt(blowfish) и сохраняется в базу данных.
Основываясь на этих данных создадим диаграмму IDEF0 и диаграмму декомпозиции.
Все функциональные процессы описаны в диаграммах (6,6а).
Рисунок 6 – диаграмма IDEF0
Рисунок 6а – диаграмма декомпозиции
2.3 Построение диаграммы классов
Класс — это элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию. Другие абстрактные типы данных — метаклассы, интерфейсы, структуры, перечисления, — характеризуются какими-то своими, другими особенностями. Наряду с понятием «объекта» класс является ключевым понятием в ООП
На основе технического задания, спроектированной уже базе данных, для реализации функций системы с учетом всей функциональной составляющей, были спроектированы и созданы основные классы. Список классов и их назначение представлены в таблице 4.
Таблица 4 — описание классов
Наименование | Описание |
NoteController | Основной класс, предназначенный для создания, просмотра, и удаления сообщений |
Note.php | Класс модели сообщения. В нем описаны сценарии и валидация данных |
SiteController | Подключения экшна, для вывода ошибок |
Для построения диаграммы классов мы воспользуемся встроенной функцией IDE Phpstorm автоматической генерации UML-диаграммы.
2.4 Построение диаграммы последовательности
Используя данные полученные из прошлого пункта мы можем построить диаграмму последовательности.
Диаграмма последовательностей относится к диаграммам взаимодействия UML, описывающим поведенческие аспекты системы, но рассматривает взаимодействие объектов во времени. Другими словами, диаграмма последовательностей отображает временные особенности передачи и приема сообщений объектами.
Основными элементами диаграммы последовательности являются обозначения объектов (прямоугольники с названиями объектов), вертикальные «линии жизни», отображающие течение времени, прямоугольники, отражающие деятельность объекта или исполнение им определенной функции (прямоугольники на пунктирной «линии жизни»), и стрелки, показывающие обмен сигналами или сообщениями между объектами.
Рисунок 7 – диаграмма последовательности
2.5 Построение диаграммы прецедентов
Диаграмма прецедентов (диаграмма вариантов использования) в UML — диаграмма, отражающая отношения между актёрами и прецедентами и являющаяся составной частью модели прецедентов, позволяющей описать систему на концептуальном уровне
Основное назначение диаграммы — описание функциональности и поведения, позволяющее заказчику, конечному пользователю и разработчику совместно обсуждать проектируемую или существующую систему.
Рисунок 8 – диаграмма прецедентов (вариантов использования)
У актера «Пользователь» есть следующие варианты использования:
— Отправить сообщение;
— Удалить сообщение сейчас;
— Прочитать сообщение.
Общая структура проекта
В качестве шаблона будем использовать YII2 Basic Template. Этот шаблон –
Скелет веб-приложения, который идеально подходит для быстрой разработки ненагруженных проектов.
Шаблон содержит базовые возможности, такие как, функция входа/выхода, контактная страница, также включает в себя наиболее используемые конфигурации.
Рисунок 9 – структура директорий
- assets - папка с бандлами, управление статикой в проекте;
- commands - папка с контроллерами для консольных команд;
- config - все конфигурации проекта;
- controllers – контроллера;
- mail - шаблоны для писем;
- models - модели
- runtime - папка в которой хранятся логи, файловый кеш и тп.;
- tests - тесты для проекта;
- vendors - внешние зависимости;
- views - шаблоны проекта;
- web - вэб директория проекта.
Подготовка веб-интерфейса
Полезной особенностью выбранного фреймворка Yii2, является поддержка front-end CSS фреймворка Twitter Bootstrap 3.0.
Bootstrap, позволяет упростить разработку, с помощью HTML и CSS-шаблонов для оформления типографики, веб-форм, блоков, сетки, навигации итд.
Данный фреймворк мы используем, чтобы:
- Ускорить разработку;
- Реализовать адаптивный дизайн;
- Реализовать кроссбраузерность;
Фреймворк направлен на создание макета под различные устройства,
планшеты, смартфоны, так как масштабируется в зависимости от ширины.
В Bootstrap встроены различные шаблоны, которые позволяют настроить дизайн с учётом работы различных браузеров. Это означает, что интерфейс будет выглядеть одинаково на любом используемом браузере.
Подключение Bootstrap к Yii2 выполняется с помощью оператора use.
Рисунок 10 – подключение Bootstrap
Для вывода компонентов фреймворка используются виджеты Yii2, настройки к которому передаются в виде массива параметров. Виджеты можно многократно использовать для форматированного вывода данных.
Чтобы реализовать веб-интерфейс разрабатываемого сервиса понадобятся определенные компоненты Bootstrap, указанные в таблице 8.
Таблица 6 – Используемые компоненты Bootstrap
Название компонента | Классы | Назначение |
Grid-система | row,col | верстка колонками |
Навигационная панель | navbar,nav | меню навигации |
Групированный список | list-group | отображение подменю |
Блок | jumbotron | отображение большого центрального блока |
Форма ввода | form-group | форма для ввода данных |
Уведомления | alert | вывод сообщений о статусе сообщения, пользовательских ошибках итд. |
Форма вывода | form-control | форма для вывода информации |
В качестве тестирования адаптивности проверяем веб-интерфейс с помощью встроенного отладчика в браузере Google Chrome, имитируя работу с сервисом на устройстве IPhone 6 (375x667).
Рисунок 11 – отображение интерфейса сервиса
на мобильном устройстве
3.4 Разработка базы данных для сервиса
Для хранения информации и параметров отправленных сообщений будет использоваться база данных Mysql.
После установки приложения на сервер и подключения к бд, нужно выполнить команду для выполнения миграции бд, которая создаст структуру на основе файла m170602_124754_init.php.
3.5 Реализация функций на языке PHP
Для данного программного модуля был сделан HTML/СSS каркас с учетом отображения на различных расширений экранов устройств с помощью фреймворка Bootstrap.
Реализация Back-end-части, будет производиться на языке PHP, на заявленном фреймворке Yii2.
3.5.1 Шифрование данных bcrypt
3.6 Перспектива развития
3.7 Демонстрация работы сервиса
Рисунок 10.1 – создание приватного сообщения
Рисунок 10.2 – генерация уникальной ссылки
Рисунок 10.3 – запрашивание пароля для дешифрования
Рисунок 10.4 – получение дешифрованного сообщения
Заключение
В данном дипломном проекте разработана платформа для привлечения трафика с учетом его геолокации.
Целью данной работы являлась разработка веб-платформы для привлечения трафика с учетом его геолокации.
Для достижения поставленной цели были решены следующие задачи:
1. Выполнен анализ существующих открытых источников трафика;
2. Разработана платформа для привлечения трафика.
Существующие аналоги данной платформы по ряду характеристик уступают созданной.
Были выбраны соответсвующие инструменты разработки, и программный комплекс. Была разработана система сбора данных по геолокационным отметкам, что позволило получать более целевой трафик.
Функционал даннной системы может быть расширен путем добавления новых модулей и расширения уже имеющихся.
Приложение 1
Глоссарий
SQL - Standard Query Language (Стандартный язык запросов).
АИС - автоматизированная информационная система.
Архитектура системы — совокупность свойств системы, существенных для пользователя.
Атрибут – поле данных, содержащих информацию об объекте.
БД - база данных, именованная совокупность взаимосвязанных данных, отображающая состояние объектов и их отношение, используемых несколькими пользователями и хранящимися с минимальной избыточностью.
БП - бизнес-процесс.
ГОСТ - государственный стандарт.
Ж/Д - железная дорога.
Импорт – утилита СУБД, служащая для чтения файлов информационной системы, которая содержит данные из базы данных.
Индекс – таблица, используемая для определения адреса записи.
Информационная система (ИС) - взаимосвязанная совокупность средств, методов и персонала, используемых для хранения, обработки и выдачи информации в интересах достижения поставленной цели»
ИО - информационное обеспечение
ИТ - информационные технологии.
Ключ – элемент данных, используемый для идентификации и определения адреса записи.
ЛВС - локальная вычислительная сеть.
Модель данных – базовый инструментарий, обеспечивающий на формальном абстрактном уровне конкретные способы представления объектов и связей.
ОС - операционная система.
Отношения – агрегат данных, хранящийся в одной из таблиц БД.
ПО - программное обеспечение.
Реляционная СУБД – система управления базами данных, поддерживающая реляционную модель данных.
Сервер – программа, реализующая функции СУБД: определение данных, запись/чтение/удаление данных, диспетчирование и оптимизация выполнения запросов.
Тип данных – характер данных, определяющий способ представления значения в памяти.
Файл – именуемая единица информации, поддерживаемая операционной системой.
Приложение 2
(обязательное)
Класс NoteController – контроллер управления сообщениями
<?php
namespace app\controllers;
use app\models\Note;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
class NoteController extends Controller
{
public function actionCreate()
{
$model = new Note(['scenario' => Note::SCENARIO_CREATE]);
if ($model->load(\Yii::$app->request->post()) && $model->save()) {
return $this->render('created', [
'model' => $model,
]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
public function actionView($hash = null)
{
list($uid, $password) = array_pad(explode('!', $hash), 2, null);
$model = Note::findOne(['uid' => $uid]);
if (is_null($model)) {
throw new NotFoundHttpException(
'Записка с ID: ' . $uid . ' уже была прочитана и безвозвратно уничтожена. '
. 'Если вы забыли переписать текст – попросите отправителя отправить новую записку.'
);
}
if (!empty($password) && !$model->validatePassword($password)) {
return $this->render('enterPasswordForm', [
'model' => $model,
]);
}
if (empty($password)) {
$model->setScenario(Note::SCENARIO_ENTER_PASSWORD);
if ($model->load(\Yii::$app->request->post()) && $model->validate() && $model->delete()) {
return $this->render('view', [
'model' => $model,
]);
} else {
return $this->render('enterPasswordForm', [
'model' => $model,
]);
}
}
$model->delete();
return $this->render('view', [
'model' => $model,
]);
}
public function actionDelete($uid)
{
$model = Note::findOne(['uid' => $uid]);
if (!is_null($model)) {
$model->delete();
}
return $this->redirect(\Yii::$app->homeUrl);
}
}
Приложение 3
(обязательное)
Класс модели Note.php – описание сценариев и валидации данных
<?php
namespace app\models;
use yii\db\ActiveRecord;
/**
* Class Note
* @package app\models
*
* @property $uid string
* @property $password_hash string
* @property $body string
*
* @property $password string
* @property $passwordRepeat string
*/
class Note extends ActiveRecord
{
const SCENARIO_CREATE = 'create';
const SCENARIO_ENTER_PASSWORD = 'enter_password';
public $password;
public $passwordRepeat;
private $passwordEntered = false;
public static function tableName()
{
return '{{%note}}';
}
public function scenarios()
{
return [
self::SCENARIO_CREATE => ['body', 'password', 'passwordRepeat'],
self::SCENARIO_ENTER_PASSWORD => ['password'],
];
}
public function rules()
{
return [
['body', 'required', 'on' => self::SCENARIO_CREATE],
[['password', 'passwordRepeat'], 'string', 'min' => 6, 'max' => 32],
['password', 'compare', 'compareAttribute' => 'passwordRepeat', 'on' => self::SCENARIO_CREATE],
['password', 'required', 'on' => self::SCENARIO_ENTER_PASSWORD],
['password', 'validateEnterPassword', 'on' => self::SCENARIO_ENTER_PASSWORD],
];
}
public function validateEnterPassword($attribute, $params)
{
if (!$this->validatePassword($this->$attribute)) {
$this->addError($attribute, 'Неверный пароль.');
}
}
public function attributeLabels()
{
return [
'body' => 'Текст записки',
'password' => 'Секретный пароль',
'passwordRepeat' => 'Повторите пароль',
];
}
public function beforeSave($insert)
{
if (parent::beforeSave($insert)) {
$security = \Yii::$app->security;
if (empty($this->password)) {
$this->password = $security->generateRandomString(8);
} else {
$this->passwordEntered = true;
}
$this->uid = $security->generateRandomString(16);
$this->setPassword($this->password);
return true;
} else {
return false;
}
}
public function validatePassword($password)
{
return \Yii::$app->security->validatePassword($password, $this->password_hash);
}
public function setPassword($password)
{
$this->password_hash = \Yii::$app->security->generatePasswordHash($password, 8);
}
public function getLink()
{
$id = '';
if ($this->passwordEntered === false) {
$id .= $this->uid . '!' . $this->password;
} else {
$id .= $this->uid;
}
return \Yii::$app->request->getHostInfo() . '/' . $id;
}
}
Приложение 4
(обязательное)
Класс SiteController – подключение экшена, для вывода ошибок
<?php
namespace app\controllers;
use yii\web\Controller;
class SiteController extends Controller
{
/**
* @inheritdoc
*/
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
}
Введение
Одной из самых востребованных возможностей современных информационных технологий, является возможность хранения информации. Однако с другой стороны, эта возможность создает проблему анонимности и безопасности для информации в сети.
Например по данным “SearchInform” в 2016 году от утечек конфиденциальных данных пострадали 49%, российских компаний.
Согласно индексу критичности утечки данных Gemalto (Breach Level Index), в 2016м году по всему миру было зафиксировано более полутора тысяч инцидентов утечки информации, которые привели к компрометации более миллиарда записей данных. Например в России, самой крупной среди них является атака на сервис Mail.ru получившая 9 баллов по Индексу критичности утечек. В результате этой атаки было скомпрометировано более 20ти миллионов записей, включавших в себя данные об именах пользователей, зашифрованные пароли, IP-адреса, а также их телефонные номера.
Сегодня с каждым днем растет количество каналов, потенциально уязвимых для утечек информации в сети, в обиход приходят новые сервисы доставки мгновенных сообщений, многие из которых используются компаниями для передачи важных данных. Такое обилие способов передачи информации в сети порождает все большее количество ухищрений в виде способов воровства информации.
В таких условиях возникает большая необходимость в сервисах и средствах для защиты информации, использование которых будет существенно минимизировать риски утечек данных в сети.
Востребованность темы подтверждается перспективностью стремительного перехода компаний к использованию электронного документооборота.
На основании этого возникает потребность в создании сервиса для передачи приватных сообщений в сети, использующим шифрование данных.
Цель работы – создание сервиса приватных сообщений. В связи с поставленной целью требуется решить следующие задачи:
1. Анализ существующих сервисов для доставки приватных сообщений.
2. Разработка веб-сервиса.
3. Сравнение существующих и созданного сервисов.
4. Общая оценка работы сервиса.
Глава 1. Предпроектное исследование и анализ предпроектной ситуации