Статья опубликована в рамках: LXXIX Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 11 июля 2019 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции
дипломов
ЗАЩИТА ДАННЫХ В ФОРМАХ ВЕБ-ПРИЛОЖЕНИЙ С ПОМОЩЬЮ МОДУЛЕЙ JQUERY И PYTHON-ФРЕЙМВОРКОВ
Аннотация. В статье рассматривается способ защиты данных в HTML-формах с помощью инструментов фреймворка на примере Django и Flask, а также с помощью ограничения ввода данных через автозаполнение полей на примере модуля jQuery, что упрощает процесс взаимодействия пользователя с системой, а также позволяет повысить эффективность контроля и снизить риск вредоносного ввода.
Ключевые слова: информационная безопасность, экранирование символов, автозаполнение.
Для взаимодействия с пользователем, в качестве части интерфейса веб-приложений активно используются формы. Форма позволяет пользователю ввести данные, которые затем можно сохранить и обработать на стороне сервера для последующего использования. Основная задача форм заключается в том, чтобы собрать пользовательскую информацию и передать ее для дальнейшей обработки на стороне сервера. Однако пустое поле для ввода данных может расцениваться как уязвимость. Пользователя стоит ограничить в вводе данных через предложение ожидаемых вариантов с помощью инструмента автозаполнения, а также дополнительного экранирования.
Данным пользователя нельзя слепо доверять и вставлять непосредственно в содержимое страницы, так как злоумышленники могут использовать это с плохими намерениями.
Есть риск, что переменная может содержать символы, которые повлияют на структуру полученного HTML.
В переменную с именем можно ввести не только свое имя, но и число, фразу в тегах HTML, а может даже и скрипт. Данный вид уязвимости называется межсайтовый скриптинг (или XSS-атака). Межсайтовый скриптинг позволяет пользователю вставить собственные JavaScript скрипты в браузеры других пользователей. В базе данных сохраняются вредоносные скрипты, которые затем запрашиваются и отображаются браузерами других клиентов. На данный момент множество современных фреймворков решает эту задачу из коробки.
В языке python шаблоны фреймворка Django защищают сайт от большинства способов межсайтового скриптинга. Они экранируют специальные символы, которые обычно создают проблемы для HTML. Можно позволить Django автоматически экранировать символы, замены показаны в таблице 1.
Таблица 1
Замены символов шаблонизатора Django
Символ |
Замена |
< |
< |
> |
> |
‘ |
' |
“ |
" |
& |
& |
Можно также вручную применять ко всем переменным фильтр escape, преобразующий потенциально опасные HTML-символы в безопасные. Однако есть вероятность забыть экранировать переменную.
Во Flask данная задача решается средствами шаблонизатора Jinja2. Jinja2 также предоставляет доступ к автоматическому экранированию, либо предоставляет возможность экранировать каждую переменную вручную (через фильтр e), например:
{{ user.name|e }}
И хотя экранирование защищает пользователя от большинства видов вредоносного ввода, оно не является панацеей. С другой стороны, можно ограничить ввод данных пользователя с помощью инструмента автозаполнения. Это сузит варианты выбора и не допустит ввод некорректных или опасных значений.
Разработчики Google зафиксировали, что скорость заполнения формы пользователями уменьшилась на 30 % при использовании автозаполнения. Одним из самых распространенных инструментов реализации этой функции является плагин JavaScript-библиотеки jQuery - Autocomplete. Он помогает пользователю заполнять текстовые поля, предлагая подходящие варианты по первым набранным им символам. Для выбора варианта из представленных подсказок можно воспользоваться клавиатурой (клавиши стрелок и enter) или мышью.
Данные для автозаполнения могут быть заданы с помощью массива, URL страницы или функции. Если количество вариантов не превышает 50-100 элементов, то использование массива будет удачным решением. Функция же позволяет искать подходящие элементы самостоятельно. В качестве аргумента функция принимает объект запроса (с одним полем term, где будет текущее содержимое текстового поля, для которого нужно подобрать элементы автозаполнения) и функцию, которую нужно будет вызвать и передать ей список подходящих элементов автозаполнения. Третий вариант: при изменении вводимого текста будет автоматически отправляться ajax-запрос на сервер, а он свою очередь будет искать все подходящие варианты по заданной подстроке в базе данных и выдавать их в качестве ответа. Таким образом, для пользователя сужается выбор вводимых данных, что минимизирует появление ошибок и отправку данных злоумышленником.
Описанные в статье способы защиты ввода данных в формах (экранирование и автозаполнение) упрощают процесс взаимодействия пользователя с системой и снижают риск ввода данных злоумышленником, однако даже эти методы несовершенны. Если форма подразумевает загрузку пользовательских файлов, то экранирование будет бесполезно. Стоит определить белый список допустимых расширений файлов для загружаемых пользователем файлов, также стоит ограничить размер таких загрузок в конфигурации веб сервера для предотвращения атак на отказ сервиса.
Список литературы:
- Autocomplete // jquery.page2page.ru [Электронный ресурс]. - Режим доступа: http://jquery.page2page.ru/index.php5/ (дата обращения: 16.06.2019).
- Autofill: чего не знают веб-разработчики, хотя должны знать // habrahabr [Электронный ресурс]. - Режим доступа: https://habr.com/ru/company/mailru/blog/301840/ (дата обращения: 16.06.2019).
- Help users checkout faster with Autofill // developers google [Электронный ресурс]. - Режим доступа: https://developers.google.com/web/updates/2015/06/checkout-faster-with-autofill (дата обращения: 15.06.2019).
- Security Considerations // flask [Электронный ресурс]. - Режим доступа: http://flask.pocoo.org/docs/1.0/security/ (дата обращения: 15.06.2019).
- Безопасность в Django // djbook [Электронный ресурс]. - Режим доступа: https://djbook.ru/rel1.9/topics/security.html (дата обращения: 16.06.2019).
дипломов
Оставить комментарий