Как защитить свой Python-код
Описали четыре техники увеличения безопасности кода и подобрали примеры к каждой из них. В статье вы познакомитесь не только с универсальными приемами, но и специфическими – для серверов и ботов.
804 открытий7К показов
Безопасностью кода студентов озадачивают нечасто. Нас знакомят с некоторыми устоявшимися приемами, вроде применения виртуального окружения, но в систему это складывается только во время работы.
Чтобы ускорить процесс и избавить вас от возможных проблем на старте, я собрала топ способов сделать код защищеннее от двух видов воздействия: злонамеренного (например, использование уязвимостей сайта хакерами) и непреднамеренного (ошибки разработчика, приводящей к падению прода).
Валидируйте входные данные
Стоит фильтровать пользовательский ввод на наличие определенных символов. В разработке веб-приложений это особенно важно, потому что помогает предотвратить различные атаки, такие как 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 вы сможете.
Но если речь заходит о других источниках, рекомендую попробовать такое скачивание в изолированной среде. Для этого подойдет дешевый покупной сервер.
Заключение
Техник защиты кода существует еще немало, я перечислила основные, которые встречаются в моей работе при создании ботов и дата-аналитике. Как только вы почувствуете свободу в написании кода, сразу же используйте накопленный предшественниками опыт, чтобы проект реализовался с меньшим количеством проблем.
Какие еще техники защиты кода вы используете? Поделитесь в комментариях
804 открытий7К показов