Файл: Особенности алгоритмизации при разработке WEB-приложений (Общие подходы программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 109

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Так как чаще всего администратор зарегистрирован одним из первых, даже если с идентификатором 1 результат не будет получен, перебрав еще несколько значений можно будет получить данные доступа администратора сайта. Даже если злоумышленник не узнает данные доступа администратора, он сможет получить личные данные пользователей, что тоже является серьезной проблемой в безопасности. Особенно если среди личных данных есть данные документов, информация о счетах и т.п. В больших проектах такая ошибка может закрасться в неочевидных местах. И найти место в приложение подверженном SQL-инъекции бывает достаточно трудно. Избежать таких ошибок можно при правильном планировании архитектуры приложения. При использовании шаблона MVC, все данные возвращает только Модель. Соответственно проверив только Модели на наличие фильтрации данных при SQL запросах, можно не опасаться эксплуатации этой уязвимости.

3. XSS атака

Атака Cross-Site Scripting – межсайтовый скрптинг. Тип атаки при котором на сайт через различные уязвимости внедряется JavaScript код, который производит вредоносные действия. Например может прочитать Cookies файл который необходим для "узнавания" сервером пользователя на сайте и отправить его с помощью AJAX запроса злоумышленнику. Далее злоумышленник подставив значения Cookies у себя в браузере получит доступ к сайту с правами атакуемого пользователя. Если атаке был подвержен администратор, то соответственно получит доступ администратора.

Уязвимость возникает при недостаточной фильтрации входных данных, и не правильной архитектуре Веб-приложения. Самый простой пример уязвимого скрипта будет выглядеть примерно так.

<h2><?=$_GET[‘var’]?></h2>

Он получает из запроса переменную var и выводит ее на экране. В штатном режиме адресная строка выглядит примерно так

http://some.local/page.php?var=About

PHP скрипт отработает и выведет

<h2>About</h2>

Изменив в адресной строке значение переменной var можно эксплуатировать XSS уязвимость

http://some.local/page.php?var=<script>alert(‘xss’)</script>

PHP скрипт отработает и выведет

<h2><script>alert(‘xss’)</script></h2>

А в браузере у пользователя подверженного атаке выведется так называемое alert сообщение. Изображение 2.

Этот скрипт не производит никаких опасных действий, но ничего не мешает злоумышленнику изменить его, на скрипт который будет воровать Cookies.

Такую уязвимость можно назвать пассивной, минусом ее (естественно для злоумышленника) является, что необходимо заманить пользователя на такую ссылку.


Более опасной является активная уязвимость. Для ее эксплуатации, злоумышленнику необходимо найти форму на сайте, которая недостаточно хорошо фильтрует входные данные и записывает их в базу данных, после чего выводит на какой то странице. К примеру" форма комментария", если злоумышленник отправит через такую форму зловредный код, то он будет срабатывать у всех посетителей сайт, которые будут просматривать страницу с этим комментарием, в котором находится зловредный код.

Еще более опасная разновидность XSS это атака CSRF/XSRFМежсайтовая подделка запросов. Такая атака позволяет злоумышленнику выполнять от имени жертвы действия на сервере, где не реализованы средства защиты от CSRF

Для защиты от данных атак, кроме очевидных, таких как фильтрация входных данных, используются разные методы и способы. Во все формы на сайте добавляются специальные токены, например такие.

<input type="hidden" name="csrf" value="1234:5ad02792a3285252e524ccadeeda3401">

Токен генерируется по специальному алгоритму, который знает только сервер. Так же браузеры накладывают много ограничений при передаче кросс-доменных запросов. В свою очередь также существую способы для обхода этих ограничений.

В реальности часто эти уязвимости эксплуатируются совместно. Например через SQL инъекцию можно получить данные доступа администратор, и тогда через форму редактирования контента загрузить вредоносный PHP скрипт. Либо так же через SQL инъекцию, произвести запись вредоносного JavaScript кода, который будет выполняться на страницах посетителей.

При эксплуатации SQL инъекции уже не важно, что на сайте везде происходит проверка входных данных на наличие тэга <script>, так как злоумышленник запишет свой код напрямую в базу данных, через SQL запрос.

Несмотря на то что в современном Вебе уделяется большое внимание безопасности, уязвимости никуда не исчезают и успешно эксплуатируются.

Для того чтобы уменьшить риск атак необходимо производить комплекс мер. Например установить на сайт SSL сертификат, для передачи данных через шифрованное соединение HTTPS. Правильно настроить Веб-сервер, СУБД, следить за обновлениями безопасности программ работающих на сервере. Скрыть доступ от внешнего мира всех серверных приложений (например СУБД), кроме Веб-сервера. В своих проектах использовать библиотеки, компоненты из надежных источников. При использовании CMS (систем управлением контентом) и фреймворков следить за актуальностью их версий, вовремя обновлять при обнаружение в них уязвимостей. Правильно и грамотно разрабатывать архитектуру своего приложения.


Не хранить в передаваемых Cookies файлах никаких личных данных, даже идентификатора пользователя. Лучше всего хранить идентификатор сессии с проверкой IP адреса. В таком случае даже если злоумышленник украдет Cookies файл, он не сможет ничего узнать о пользователе и воспользоваться открытой сессией.

Правильная настройка прав и разрешенных команд в СУБД позволит если не избежать, то хотя бы минимизировать опасность при эксплуатации SQL инъекции.

Кроме всех этих мер, необходимо проследить, чтобы пользователь использовал безопасные пароли. Пароль не должен совпадать с логином, минимальная длина должна быть 6, а лучше 8 символов. Использовать подтверждение email адреса или номера телефона при регистрации, чтобы в случае восстановления пароля, код восстановление приходил на правильный адрес или телефон.

Глава 5. Приложение на стороне клиента. JavaScript. AJAX

С развитием Веба, возникла необходимость поддержки языка, который мог бы выполняться на стороне клиента, в браузере. Со временем таким языком стал JavaScript (JS), который на данный момент является общепринятым стандартом. На начальном этапе JS использовался для каких-то небольших действий на стороне клиента (проверка заполнения формы, всплывающие подсказки), и в основном не воспринимался как серьезный инструмент для создания приложений. Но тенденции последнего времени привели к тому что JavaScript стал довольно мощным языком разработки. С языка который исполняется только в браузере (фронтенда) он так же переместился и на серверную часть (бэкенд), яркий пример платформа Node.JS. Для него разработано много библиотек и фреймворков. Наиболее известная библиотека JQuery. Наиболее известные фреймворки Angular.JS React.Js.

Развитие языка позволило ему реализовывать сложные алгоритмы на стороне клиента, тем самым разгружая Веб-сервер. И даже какое то время работать странице браузера в автономном режиме, при недоступности Веб-сервера. Некоторые фреймвокрки позволяют вообще всю генерацию HTML кода производить на стороне клиента, а к серверу обращаться только для получения данных из базы данных и служебной информации. Всё это привело к тому, что сейчас многие Веб сайты состоят из двух приложений. Одна часть, называемая бэкенд, работает на сервере, она уже не занимается форматированием HTML контента, либо занимается в меньшей мере, основная задача такого приложения отдавать результирующие данные на поступившие запросы от клиентского приложения. Другая часть, называемая фронтенд, исполняется на языке JS на стороне клиента в браузере. Страница уже не перезагружается при каждом запросе. Запросы от клиента к серверу работают через AJAX и становятся незаметными для пользователя. Такой подход приводит к усложнению сценариев, и как следствие созданию полноценных программ со своими алгоритмами, паттернами.


С развитием Веба и языка JavaScript появилась необходимость в механизме для обращения к серверу без перезагрузки страницы, незаметным для пользователя. Таким механизмом стала технология AJAX.

AJAX ( Asynchronous JavaScript and XML) – способ построения интерактивных пользовательских web-приложений посредством фонового обмена информацией браузера с сервером. Термин AJAX обозначил Джесси Джеймс Гаррет в 2005 году. Первыми приложениями, использующими данную технологию, стал сервис карт Google Maps и почтовый клиент Gmail.

Использование AJAX для сайта позволяет улучшить его внешний вид и удобство (приложения становятся более удобными и быстрыми для посетителей).

Принцип работы

AJAX базируется на технологии обращения к серверу без перезагрузки страницы (XTMLHttpRequest, создание дочерних фреймов или тега <script>) или использовании DHTML, позволяющего динамически изменять содержимое. Формат передачи данных – XML или JSON. AJAX можно реализовать в разных языках программирования: PHP, Ruby on Rails, ASP.NET и других. В коде web-страниц широко используется JavaScript для прозрачного обмена данными клиента с сервером. Пользователи взаимодействуют со стандартными HTML элементами, динамическое поведение которых описывается на JavaScript.

Ниже рассмотрим примеры использования этой технологии.

Пример реализации AJAX технологии на стороне клиента, на языке JavaScript представлен на Листинге 6

// Листинг 6

function sendAjax(host, data)

{

var xhr = new XMLHttpRequest();

xhr.open('POST', host, true);

xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

xhr.send(data);

}

sendAjax("http://some.local/ajax/get", "?data=Some Data");

В данном примере функция использует объект XMLHttpRequest, который позволяет создавать HTTP запросы к серверу. Далее создается сам запрос, в данном случае POST. Передаются HTTP заголовки. Первый указывает какой тип данных передается. Второй заголовок указывает что запрос является AJAX запросом. Вызывая функцию необходимо указать хост куда будут передаваться данные и сами данные. На стороне сервера мы можем принять эти данные.

Пример принятия данных на стороне сервера на языке PHP. Листинг 7

// Листинг 7

function is_post() {

if($_SERVER["REQUEST_METHOD"] == "POST") {

return true;

}

return false;

}

function is_ajax() {

if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) &&

!empty($_SERVER["HTTP_X_REQUESTED_WITH"]) &&

strtolower($_SERVER["HTTP_X_REQUESTED_WITH"]) == "xmlhttprequest")

{

return true;

} else {

return false;

}

}

if(is_ajax() && is_post()){

$data = $_POST["data"];

return $data;

}

В данном листинге можно получить данные от браузера. Функцией is_post() проверяем что запрос является POST запросом. Функцией is_ajax() проверяем пришедшие заголовки, убеждаемся что запрос является AJAX запросом. После этого мы можем получить данные обратившись по ключу data к глобальной переменной $_POST, которая содержит в себе все переданные данные методом POST.


Таким образом происходит фоновая (незаметная) передача данных от браузера к серверу. Если на сервере вернуть данные в формате JSON или XML на стороне клиента их также можно будет принять в фоновом режиме.

Для сайта применением AJAX имеет ряд преимуществ:

1.экономия трафика пользователя (вместо обновления всей страницы, загружается ее небольшая изменившаяся часть);

2.снижение нагрузки на сервер. К примеру, на странице личных сообщений форума при выделении пользователем прочитанных писем сервер вносит изменения в БД и отправляет скрипту клиента ответ о выполнении операции без повторного создания страницы и ее передачи;

3.ускорение реагирования интерфейса на команды пользователя.

Так же есть и недостатки, связанные в основном с поисковой оптимизацией сайтов

1. Не всегда возможна интеграция со стандартным набором инструментов браузера. Так как интернет-обозреватели не регистрируют в истории переходы по страницам, нельзя воспользоваться кнопкой «Назад». В некоторых случаях нет возможности добавить в закладки нужный материал;

2. Контент, загружаемый динамически, не доступен поисковым системам, поэтому необходимо обеспечить альтернативный доступ к содержимому ресурса;

3. Неправильный учет статистики перемещения пользователя по сайту;

4. Усложнение контроля целостности типов и форматов, так как процессы форматирования данных частично переносятся на сторону клиента;

5. В браузере пользователя должен быть включен JavaScript.

Альтернативой AJAX выступают Java-аплеты, JavaFX, технологии ActionScript, Flash Remoting, Adobe Flex, составляющие технологическую основу Rich Internet Applications от Macromedia, и Silverlight от корпорации Microsoft.

Заключение

В этой курсовой работе я попробовал охватить самые основные на данный момент технологии, парадигмы, принципы разработки ПО. За небольшой срок, около 20 лет, Веб-сайты прошли большой путь от статичных страничек, до серьезных Веб-приложений, которые практически вытеснили некоторые "настольные" программы, например почтовые клиенты. Первые Веб-сайты, с использованием языков программирования, практически не содержали сложных алгоритмов. Использовались небольшие вкрапления кода, для автоматической генерации контента. С развитием Интернета, увеличением пропускной способности каналов связи, Веб-сайты становились все сложнее. Так же развивались языки программирования для разработки сайтов. Это можно увидеть на примере языка PHP. До пятой версии в нем не было нормальной поддержки парадигмы ООП (сокрытия данных, поддержки интерфейсов и много другого), но постепенно перенимая лучшее из таких языков как Java, C++ он стал пригодным для разработки сложных систем. Благодаря этому стало возможно использовать многие паттерны программирования, например MVC. Всё это позволяет на данный момент создавать сложные, масштабируемые приложения, сервисы для Веба. Похожий путь, хотя и со своими особенностями прошел язык JavaScript, который на первоначальном этапе не воспринимали как полноценный язык программирования. Но развитие Интернета привело к тому, что уже сейчас на нем создаются сложные приложения, которые работают в браузере, и даже могут работать какое то время независимо от сервера. Одним из первых таких приложений была почта Gmail от компании Google. На данный момент также идет бурное развитие языка разметки HTML и каскадных таблиц стилей CSS. Уже в них начинаются появляются возможности, присущие языкам программирования (например функция calc в CSS).