Web

Django: уязвимости, от которых нужно защитить сайт в первую очередь

Lorem ipsum dolor

Django — это довольно популярная CMS, имеющая свои достоинства, недостатки и уязвимости, о которых нужно знать перед созданием собственного веб-сайта. CMS Django — это часть инфраструктуры одноименного фреймворка, который построен на языке программирования Python.

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

 

Уязвимости Django

В Django различают следующие основные уязвимости:

  • межсайтовый скриптинг, он же XSS;

  • подделка межсайтового запроса, она же CSRF;

  • SQL-инъекции;

  • вероятность склеивания;

  • и др.

 

Уязвимости Django: межсайтовый скриптинг XSS

XSS — это способ внедрить на ваш сайт на Django зловредный скрипт, который каждый раз будет запускаться в браузере пользователя в тот момент, когда он будет посещать ваш сайт. Суть в том, что зловредный скрипт должен каким-то образом сохраниться в базе данных на вашем сайте. Самый популярный метод распространения XSS — это оставлять комментарии к вашим постам на сайте с тегом <script>. В этом случае если у вас на сайте не проводится модерация комментариев, то такой скрипт автоматически попадает в базу данных вашего сайта. 

Второй по популярности метод распространения XSS — это сгенерировать ссылку на вашем сайте, которая будет видна другим пользователям, но будет приводить не на какой-то ресурс, а к активации зловредного скрипта на JavaScript.

В Django от такой уязвимости встроена собственная защита. Но важно понимать, что встроенный инструмент защищает от шаблонных методов внедрения XSS. Эта система защиты построена на экранировании специальных символов, наиболее часто создающих проблемы на сайтах и попадающих под категории «опасные». Эта защитная система подменяет опасные символы на безопасные и может игнорировать запуск JavaScript-команд.

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

  • внедрение через cookies;

  • внедрение через сторонние сервисы, подключенные к сайту;

  • внедрение через загружаемые на сайт файлы;

  • и др.

Поэтому важно для всех остальных возможных источников внедрения XSS установить собственные системы фильтрации и защиты.

 

Подделка межсайтового запроса CSRF

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

Как это вообще происходит? Злоумышленник формирует простенький и безобидный HTML-файл, который в точности повторяет форму создания нового пользователя вашего ресурса. Потом злоумышленник отправляет эту форму всем вашим пользователям и ждет, пока кто-то откроет этот HTML-файл, будучи залогиненным на вашем сайте. Как только такой пользователь откроет данный файл, форма попросит зайти на сайт еще раз. Пользователь заполнит данные «входа», которые отправятся злоумышленнику, а сам подумает, что произошел какой-то сбой. Либо открытый пользователем HTML-файл вообще ничего не попросит сделать, а просто предоставит злоумышленнику доступ к аккаунту вашего пользователя.

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

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

 

Уязвимости Django: SQL-инъекция

SQL-инъекция — это такой вид атаки, когда злоумышленник может выполнить свой собственный произвольный SQL-код, который может навредить вашей базе данных. Например, хакер может при помощи такого кода удалить или добавить какую-то информацию в базу данных вашего сайта или скопировать информацию из БД и др.

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

 

Вероятность склеивания

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

В Django есть встроенная система защиты, которая способна отражать такой вид атаки на ваш сайт, так как она закрывает возможность отображать ваш сайт внутри «невидимого слоя». Однако есть вероятность, что эта система защиты будет случайно вами отключена или неправильно настроена.

 

Заключение

На этом уязвимости Django не заканчиваются. Ведь есть ряд уязвимостей, которые свойственны всем сайтам, независимо от используемой CMS, например:

  • если отсутствует https и SSL, то хакеры могут перехватить аутентификационные данные ваших пользователей или любые другие данные, которые передаются по пути клиент-сервер, ведь данные не будут зашифрованными;

  • если не ограничить объем загружаемых файлов на сайт вашими пользователями, то есть риск, что произойдет DOS-атака с целью «положить» сервер вашего сайта;

  • когда на вашем сайте есть возможность загружать файлы, но не настроен «белый список» допустимых расширений для файлов, то есть риск, что будут загружены файлы с опасными расширениями;

  • если не ограничить количество запросов для аутентификации, то можно нарваться на атаку путем перебора паролей;

  • и др.

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

Схожие статьи

Web

Чтение/запись файла MS Word на PHP

Web

Возврат JSON из PHP-скрипта

Web

Как заменить URL-адреса в тексте ссылками HTML

Web

Когда я использую Plesk, отображается фатальная ошибка PHP

×