TOP-10 рекомендаций по безопасности в Python

На сонном острове Гозо безопасность не является проблемой. Туристы могут оставить свои сумки на пляже и отправиться в поисках приключений, не беспокоясь о том, что кто-то украдет их вещи. А в городе Орора (штат Колорадо) есть поговорка «если не привязал, значит не твое», и здесь могут украсть все, что оставлено без присмотра. Аналогичным образом дела обстоят и в Интернете — самом большом и загруженном городе мира! Если кто-то кроме вас может прочесть, скопировать, записать или ввести с помощью SQL ваши данные, — они не ваши.

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

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

Python является одним из самых популярных языков программирования в кибербезопасности. Основная причина этого — его лаконичный синтаксис и простота восприятия. Ниже мы рассмотрим 10 лучших рекомендаций по безопасности в Python, начиная от самого простого и заканчивая самым сложным.

Рекомендации по обеспечению безопасности в Python

Без лишних слов, вот 10 лучших рекомендаций по безопасности в Python, которыми вам следует начать руководствоваться прямо сейчас.

1. Используйте самую последнюю версию Python

Python 3 был выпущен еще в декабре 2008 года, и все же некоторые люди до сих пор используют для своих проектов старые версии. С этим связаны определенные проблемы. В частности Python 2.7 и более ранние версии не имеют тех обновлений безопасности, которые есть в Python 3. Например, в Python 3 были улучшены методы ввода и цепочка исключений. Если же вы запускаете в Python 2.7 код, который был написан в Python 3, ввоодимые данные могут стать уязвимым местом, так как в Python 2.7 функция input() работает аналогично небезопасной функции eval() в Python 3.

Кроме того, Python 2.7 перестает поддерживаться в 2020 году, так что, даже если вы слишком привязаны к этой версии и не хотите переходить на Python 3, вам все равно в конечном счете придется это сделать. Чем больше приложений вы развернете с использованием более старых версий Python, тем больше будет проблем с их обновлением в будущем.

Если вам нужна информация о новейшей версии Python, вы можете найти ее на python.org. Если же вы не уверены, какую версию Python вы используете в настоящее время, запустите следующую команду на своем компьютере:

python --version 

Теперь, когда у нас установлена ​​последняя версия Python, самое время создать безопасную виртуальную среду.

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

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

Virtualenv помогает создать изолированное окружение Python, создавая отдельную папку для пакетов, использующихся в данном проекте.

Давайте установим virtualenv:

pip install virtualenv 

Активируем его теперь в каталоге проекта:

venv \ Scripts \ activate.bat

Также вы можете заглянуть в Pipenv, который имеет гораздо больше инструментов для разработки безопасных приложений.

3. Установите debug = false

Для некоторых платформ Python, таких как Django, для debug в новых проектах по умолчанию установлено значение true. Это может быть полезно при разработке для отображения ошибок в нашем коде, но может представлять опасность, когда мы развертываем проект для работы на сервере, находящемся в публичном доступе. Публичное отображение ошибок в коде может показать уязвимости в наших мерах безопасности, которые затем могут использоваться кем угодно.

Поэтому при развертывании сайта для публичного использования всегда устанавливайте следующее:

Debug = False. 

Если вы используете Django, параметр Debug можно найти в файле settings.py.

Django. Debug = False

4. Никогда не создавайте коммиты с паролями

Когда пользуетесь GitHub, следите за тем, чтобы в ваши коммиты не попали файлы, readme или описания URL, содержащие вашие пароли. Будучи однажды размещенным на GitHub или аналогичном сервисе, пароль может попасть в журнал или базу данных, где его сможет найти кто-угодно. Например, в мае 2019 года хакер украл сотни паролей, сохраненных в виде обычного текста в репозиториях GitHub, и потребовал выкуп в размере 0,1 биткойна за каждый.

Сознательно избегайте добавления паролей или ключей API в ваш исходный код.

Использование Git-Secrets, может уберечь вас от передачи паролей или другой конфиденциальной информации на GitHub.

5. Остерегайтесь зараженных пакетов

Для большинства программистов мощь языка программирования определяется возможностями его библиотек. В Python есть множество впечатляющих библиотек, которые легко можно установить с помощью Pip.

При установке проверяйте дважды, что вы используете свежие пакеты из проверенных источников, так как всегда есть вероятность установить пакеты с вредоносным кодом как для Python так и для Node.js. Также убедитесь, что вашим пакетам даны правильные имена. Например, модуль «00Seven» может полностью отличаться от модуля «000Seven». Помимо двойной проверки имени пакета, вы также можете использовать такие платформы, как Sqreen, которые выявляют в вашем приложении модули с вредоносным кодом, а также проверенные пакеты, имеющие определенные проблемы или устаревшие версии. Обратите внимание на подобные решения! Они позволят вам получить больше информации о ваших приложениях, а также защитить их от атак, использующих существующие уязвимости.

6. Проверяйте пути импортирования

В Python есть три вида импорта: абсолютный, относительный и неявный (неявный присутствует только во второй версии Python). Неявный путь означает, что адрес модуля не определен. То есть, программа будет использовать модуль с заданным именем, находящийся где угодно в вашей системе. Таким образом может быть установлен пакет с вредоносным кодом. В пакетах Python, в частности PyPi, уже было зафиксировано несколько случаев троянов. Более того, некоторые были обнаружены только через год после получения.

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

from safe_package import safe_module 

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

from..some_package import less_danger

7. Защита от SQL-инъекций

Так кто же делает SQL-инъекции в базу данных? Какой-нибудь бот где-нибудь на сервере, который разрушает при этом миллионы плохо запрограммированных сайтов в расчете на то, что достаточное число людей кликнет по партнерским ссылкам..

Кроме того, при помощи SQL-инъекций злоумышленники могут получить доступ к конфиденциальным данным. Поэтому, пожалуйста, серьезно относитесь к SQL-инъекциям и следуйте обновленным процедурам защиты вашей базы данных от них. Узнать про них больше можно, например, здесь.

Если приводить примеры SQL-инъекции, то можно вспомнить получившее огласку раскрытие конфиденциальных данных пользователей через некоторые плагины WordPress. Не менее интересен случай с правительством Индии, которое столкнулось с SQL-инъекциями, оставив свою базу данных открытой со стороны веб-сайтов бронирования автобусов. В общем, SQL-инъекции не без причины возглавляют рейтинг угроз для веб-приложений (OWASP Top Ten).

8. Используйте pycryptodome для криптографии.

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

Но в отказе от этого инструмента нет ничего страшного; просто используйте вместо него pycryptodome:

pip install pycryptodome

9. Используйте Bandit

Устанавливайте пакет Bandit для каждого проекта Python. Bandit сканирует ваш код на наличие известных уязвимостей, таких, например, как распространенные проблемы с YAML, затем ранжирует риск безопасности от низкого до высокого и сообщает вам, какие строки кода вызывают проблему.

pip install bandit 
bandit path / project.py 

Bandit сканирует выбранный файл Python и представляет отчет в абстрактном синтаксическом дереве. Он быстр, прост в использовании, и мы очень рекомендуем его попробовать.

Python Bandit

10. Обновляйте программное обеспечение на ваших серверах

Иногда потенциальные опасности никак не связаны с кодом, а скорее проистекают из уязвимости сервера. Поэтому вам следует проверить, все ли ваше программное обеспечение обновлено и совместимо с вашим кодом на Python. Случайная человеческая ошибка может разрушить работу, на которую ушли годы планирования. Поэтому убедитесь, что программное обеспечение и системы управления безопасностью вашего сервера обновлены.

В заключение

Мы надеемся, что вы нашли этот список из 10 лучших рекомендаций по безопасности Python полезными. В конце давайте приведем несколько причин, почему Python столь популярен в кибербезопасности.

  • Простота в использовании.
  • Легко читаемые структуры данных.
  • Простая отладка.
  • Объектно-ориентированность.
  • Гибкость.
  • Чистота.
  • Мощные библиотеки.
  • Может использоваться практически для любого типа приложений, включая веб и финансовые технологии.

Таким образом, при создании приложений на Python вашим главным приоритетом должны быть безопасность и соблюдение конфиденциальности ваших пользователей. Ландшафт безопасности в Интернете постоянно меняется, и создается ощущение, что чем сложнее становятся языки программирования, тем легче находить уязвимости, которые можно использовать. Может быть трудно понять, что именно нужно сделать, чтобы ваши приложения стали более безопасными. Но если вы будете следовать этим 10 рекомендациям и при этом продолжите изучать вопросы кибербезопасности, вы можете преуспеть.