Как защитить учетные данные с помощью переменных среды в Python

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

Когда я еще была подростком, мои учетные данные от аккаунтов соцсетей неоднократно взламывали, потому что я либо открывала прикрепленный к почте файл, либо кликала по фишинговой ссылке. Искренне надеюсь, что с вами подобного не случится.

Исследования моего коллеги

Проведенное моим коллегой исследование показало, что с начала пандемии количество фишинговых атак заметно увеличилось. Теперь кибербезопасность стала требовать еще больше внимания. Существуют боты, которые могут перехватить ваши ключи в момент отправки кода в публичный или закрытый репозиторий GitHub. 

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

1. Настройка переменных среды

Это, вероятно, самый простой способ обработки учетных данных. Соответствующий файл находится в домашней директории и обычно скрыт. Через настройку учетных данных в .bash_profile можно устанавливать постоянные пароли. Чтобы задать пароли или секретные ключи, сначала мы с помощью cd переходим в домашнюю директорию, после чего открываем редактор файлов командой nano .bash_profile.

Добавление учетной информации в файл .bash_profile

Открыв файл, введите учетные данные и нажмите ^X + Y для сохранения. Обновите профиль bash командой source .bash_profile. Теперь можно перезапустить блокнот Jupyter и убедиться в том, что все сработало.

$ cd ~
$ nano .bash_profile
$ source .bash_profile

Откройте Jupyter и с помощью команды import os загрузите пакет OS. Этот модуль позволяет Python использовать переменные среды операционной системы.

# для проверки
import os
print(os.environ['USER'])
print(os.environ['PASSWORD']

2. Использование файла .env

🔺STEP 1: Install and Create a .env file
$ ! pip install python-decouple
$ nano .env

🔺STEP 2: Add the following lines in the scriptfrom decouple import config
USER = config('Insert Your Username')
PASSWORD = config('Insert Your Password')

🔺STEP 3: Hide your .env file on Github
$touch .gitignore
$vim .gitignore

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

Наконец, немаловажно обеспечить, чтобы этот файл .env не был отправлен вместе с кодом на GitHub, так как нужно избежать небезопасной передачи паролей через интернет. Самым простым способом создания пустых файлов является команда touch. В нашем случае мы создадим файл .gitignore, после чего откроем его через вызов vim .gitignore. Теперь можно добавить сюда .env или URL, который GitHub должен игнорировать. Простым внесением в этот файл расширения .env (введите i для вставки и :wq для сохранения и выхода) мы исключаем отправку в репозиторий всех файлов этого типа в корневой директории.

3. Использование dotenv

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

Сначала переходим в каталог “startup”. Файлы запуска IPython расположены здесь: ~/.ipython/profile_default/startup. Обратите внимание, что при загрузке данного профиля файлы .py и .ipy в этом каталоге будут выполняться до любого кода или файлов, указанных через настройки exec_lines или exec_files.

Далее мы создадим два файла (с расширениями .env и .py). Аналогичным образом мы поместим все пароли в файл .env, после чего добавим приведенные ниже строки в файл .py. Нам понадобится скачать dotenv, импортировать модуль os и указать путь к только что созданному файлу .env. load_dotenv будет использоваться для загрузки файла .env, а os для обращения к этим переменным среды в коде. 

from dotenv import load_dotenv
load_dotenv()
import osenv_path='/Users/xxxx/.ipython/profile_default/startup/xxx.env'
load_dotenv(dotenv_path=env_path)USER=os.getenv('USER')
PASSWORD=os.getenv('PASSWORD')
# for testing
print(USER)

Вот и все! Мы успешно настроили переменные среды и скрыли чувствительную информацию в Python. 🥳

Заключение

Если у вас в коде содержаться данные авторизации, информация о связи с базой данных, токены API и т.п., то лучше все это оттуда удалить и сохранить в файле .env. Как мы видели выше, реализация этого не требует много усилий, так зачем откладывать?

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи 👩🏻‍💻 Kessie Zhang: How to Protect your Credentials using Environment Variables with Python

Предыдущая статьяОчереди с приоритетом в Java
Следующая статьяКак использовать JavaScript и Node.js, чтобы сразиться с драконом в игре Fight the Dragon?