Как защитить свой Python-код

Posted by

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

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

Валидируйте входные данные

Стоит фильтровать пользовательский ввод на наличие определенных символов. В разработке веб-приложений это особенно важно, потому что помогает предотвратить различные атаки, такие как SQL-инъекции и межсайтовый скриптинг (XSS).

Покажу на примере.

Код ниже запускает простой веб-сервер, который при обработке GET-запроса возвращает HTML, вставляя имя сайта в приветствие:

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

Это происходит из-за того, что self.path контролируется конечным пользователем.

Для решения проблемы подойдут f-строки. Они безопасны и работают быстрее, да и код выглядит куда опрятнее:

Не всегда удается избежать спецсимволов в пользовательских данных. Для таких ситуаций придумали библиотеку bleach. Она может удалять нежелательные или потенциально вредоносные теги и атрибуты:

Управляйте сессиями

Во время сессии всем событиям, помимо прочих метаданных, присваевается и идентификатор. Это позволяет сохранять данные между запросами, которые растянуты по времени.

Но злоумышленники могут угнать и перехватить cookies. Чтобы этого не произошло::

— Установите флаги Secure и HttpOnly. Первый передает только через HTTPS, второй запрещает доступ через JavaScript, что не дает внедрить скрипты

— Регенерируйте идентификатор сессии при каждом входе и выходе пользователя из системы:

— Устанавливайте тайм-аут сессии:

Используйте виртуальное окружение

Виртуальное окружение (virtual environment) — надстройка, которая обеспечивает две вещи.

— Изоляцию зависимостей. У каждого окружения будет собственный набор библиотек, изолированный от системного языкового пакета. Это гарантирует, что уязвимости в последних не навредят проекту.
— Контроль версий. Виртуальное окружение позволит зафиксировать разновидность используемых библиотек с помощью requirements.txt или другого файла конфигурации. Код, скопированный из многолетнего треда на StackOverflow, часто выдает ошибку именно из-за этого. Если вы работаете с несколькими проектами, требующими разных версий одной и той же библиотеки, virtualenv поможет их «развести по углам».

Чтобы создать виртуальное окружение, используйте библиотеку virtualenv и команду:

Чтобы освоить установку утилиты, вход в среду и другие полезные команды, обратитесь к англоязычной статье на freecodecamp.org.

Скачивайте только проверенные модули

Сообщество Python отлично справляется с написанием модулей под разные задачи: от генерации игрушечных данных до внедрения GPT на сайт. В 99% случаев найти готовое решение на PyPi + GitHub вы сможете.

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

Заключение

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

Какие еще техники защиты кода вы используете? Поделитесь в комментариях

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *