Устроившись работать в компанию по обеспечению облачной безопасности, я начала вырабатывать соответствующий образ мышления и теперь понимаю, насколько важно проявлять усилия по защите организаций от кибератак. В нынешних условиях, когда из-за пандемии очень многие работают удаленно, уровень угрозы киберпреступности существенно возрос. Недооценивать возможности современных хакеров никак нельзя.
Когда я еще была подростком, мои учетные данные от аккаунтов соцсетей неоднократно взламывали, потому что я либо открывала прикрепленный к почте файл, либо кликала по фишинговой ссылке. Искренне надеюсь, что с вами подобного не случится.
Проведенное моим коллегой исследование показало, что с начала пандемии количество фишинговых атак заметно увеличилось. Теперь кибербезопасность стала требовать еще больше внимания. Существуют боты, которые могут перехватить ваши ключи в момент отправки кода в публичный или закрытый репозиторий GitHub.
Предлагаю начать с того, чтобы спрятать ваши учетные данные и избежать случайной утечки любой чувствительной информации через ревью кода на GitHub. В этой статье я поделюсь 3 способами скрытия учетной информации в блокноте Jupyter и переменных среды на Mac.
1. Настройка переменных среды
Это, вероятно, самый простой способ обработки учетных данных. Соответствующий файл находится в домашней директории и обычно скрыт. Через настройку учетных данных в .bash_profile
можно устанавливать постоянные пароли. Чтобы задать пароли или секретные ключи, сначала мы с помощью cd
переходим в домашнюю директорию, после чего открываем редактор файлов командой nano .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
. Как мы видели выше, реализация этого не требует много усилий, так зачем откладывать?
Читайте также:
- Стоит ли винить Python в низкой производительности?
- Пространства имен и области видимости в Python
- Как создавать веб-сокеты в Python
Читайте нас в Telegram, VK и Дзен
Перевод статьи 👩🏻💻 Kessie Zhang: How to Protect your Credentials using Environment Variables with Python