При проектировании веб-приложения важна защита пользовательских данных. В данной статье рассмотрим основные типы атак и методы защиты на фреймворке Django.
Ключевые слова: Django, CSRF, HTML, TLS, XSS.
Django — это популярная платформа для веб-разработки на языке Python, которая позволяет быстро создавать масштабируемые веб-приложения, такие как блоги, форумы, интернет-магазины и другое. Что привлекает внимание злоумышленников, стремящихся получить несанкционированный доступ к пользовательским данным или изменить их. Есть другой, не менее популярный фреймворк на Python — Flask. Flask является микрофреймворком, который предлагает меньше встроенных функций безопасности, чем Django. Что делает его более гибким и позволяет разработчикам самим выбирать и настраивать инструменты безопасности. С другой стороны, Django — это этакий комбайн, который предлагает более широкий набор инструментов для обеспечения безопасности.
Архитектура
Первоочередная задача для обеспечения безопасности любого веб-приложения состоит в выборе правильной архитектуры. Обычно, при разработке приложения, команда инженеров-программистов и менеджеров по продуктам работает вместе для определения эффективной технической модели, соответствующей конкретным бизнес-целям. В области разработки программного обеспечения, роль архитектора заключается в проектировании модулей на высоком уровне и выборе оптимальных способов их взаимодействия. Кроме того, важно учесть лучшие практики хранения данных, будущие сторонние зависимости, а также преобладающую парадигму программирования и другие факторы.
Выбор архитектуры программного обеспечения сравнивается с проектированием здания — это тонкий процесс, связанный с риском, поскольку переделка готового приложения обходится очень дорого. То же самое относится и к архитектуре системы безопасности. Часто уязвимости можно легко предотвратить на этапе планирования и оценки, так как нехватка этих этапов может привести к необходимости переделки кода приложения, что затратно. По возможности не изобретайте «велосипеды», будьте более консервативны при выборе продуктов. Не у всех хватает ресурсов, все тщательно протестировать
Контроль доступа.
Согласно рейтингу OWASP Top Ten https://owasp.org/www-project-top-ten/ [1] в 2021 году на первое место вырвалось атака A01:2021-Broken Access Control. Процесс авторизации дает пользователям специфические права на выполнение определенных действий, а также подтверждает эти права при попытке выполнения этих действий. После успешной аутентификации происходит авторизация, которая определяет, к каким функциям и данным пользователь имеет доступ, обеспечивая должное разделение прав доступа.
Именно поэтому веб-приложения нуждаются в механизмах контроля доступа, которые предоставляют пользователям различные привилегии в использовании приложения. Контроль доступа ограничивает возможность тех или иных лиц или объектов выполнить определенные функции и получить доступ к запрашиваемым ресурсам. Нарушение контроля доступа — это частая и критическая уязвимость системы безопасности.
В Django есть встроенный инструмент для управления доступом — Django Admin, который позволяет создавать и редактировать пользователей, а также настраивать права доступа для них.
Аутентификация создается автоматические при создании веб-приложения с помощью команды
django-admin startproject
в файле settings.py вашего приложения уже прописаны настройки:
INSTALLED_APPS = [
...
'django.contrib.auth', # Фреймворк аутентификации и моделей по умолчанию.
'django.contrib.contenttypes', # Django контент-типовая система (даёт разрешения, связанные с моделями).
....
MIDDLEWARE = [
... 'django.contrib.sessions.middleware.SessionMiddleware', # Управление сессиями между запросами
... 'django.contrib.auth.middleware.AuthenticationMiddleware', # Связывает пользователей, использующих сессии, запросами.
....
Также контроль доступа реализуется с помощью таких пакетов как Django-axes https://pypi.org/project/django-axes/ и Django-guardian https://pypi.org/project/django-guardian/
Межсайтовый скриптинг (XSS)
XSS — это термин, описывающий класс атак, позволяющих злоумышленнику внедрить скрипты через веб-сайт, которые будут выполнены на устройстве пользователя, посетившего страницу. Часто злоумышленники достигают этого путем сохранения вредоносного кода в базе данных, откуда код будет извлечен и выполнен для пользователя, запрашивающего определенные данные (например, сохранение тега