Как скрывают секретные ключи и пароли в Python

Всякий раз, загружая свой проект или код на GitHub с общедоступным репозиторием, нужно помнить о безопасности. Ведь пользователи, которые запустят файл, содержащий секретные ключи и пароли, будут иметь как минимум доступ на чтение, а значит  —  получат возможность легко завладеть паролями. Так что вопрос безопасности очень важен и нужно очень тщательно его продумывать. Например, нужно всегда скрывать идентификационные ключи или токены Google OAuth, секретные ключи в приложении на Django и т. д.

Прочитав это руководство, вы научитесь скрывать свои пароли от всех тех, кто будет открывать и смотреть ваш проект на Github.

Сначала сделаем примерный файл на Python с названием temp.py и попробуем скрыть в нем пароль.

userID = 'shivi_020'
password = 'thenightwing'

print(userID, password)

Очевидно, что при загрузке этого кода на Github хотелось бы, чтобы другие люди не видели пароль, содержащийся в файле temp.py.

В Python, чтобы скрыть пароль, ​понадобится функция config (она находится в модуле decouple) или функции переменных окружения из модуля os. Будем работать с функцией config модуля decouple. Для установки этого модуля выполняем в терминале следующую команду:

pip install python-decouple

После установки создаем файл .env в той же папке, что и файл test.py, после чего копируем и вставляем в него идентификатор пользователя userID и пароль:

userID = 'shivi_020'
password = 'thenightwing'

Примечание: этот метод будет работать только при создании файла .env. Никакой другой формат файла не подойдет (хотя при желании можно использовать .py.json.ini или config.ini).

Вернемся к файлу test.py и внесем в него следующие изменения:

from decouple import config

userID = config('userID',default='')
password = config('password',default='')

print(userID, password)

Нетрудно догадаться, как этот код будет работать. Идентификатор пользователя userID и пароль будут извлечены из файла .env. Здесь в функции config присутствует аргумент по умолчанию. Зачем? На тот случай, если поля с заданным значением (первый аргумент) нет в файле .env. Тогда в кавычки будет подставлен этот аргумент по умолчанию. Если бы его не было, то должна была быть выброшена ошибка и значение этого поля инициализировано пустой строкой или любым другим значением.

Но проблема по-прежнему остается: любой, кто откроет ваш репозиторий, увидит пароль, если откроет файл .env. Чтобы не допустить этого, в одной папке с .env и test.py создадим файл .gitignore и добавим в него .env:

.env

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

Чтобы ваши скрипты применялись и другими пользователями, напишите документацию и сохраните ее в Readme.md, изложив подробности создания файла .env и запуска кода, а также загрузки его в репозиторий GitHub. Для использования скрипта им нужно будет ввести в ими же созданном файле .env свой собственный идентификатор пользователя userID с соответствующим паролем.

Выходим из системы

Точно так же скрывают секретные ключи в проектах на Django, токены Google OAuth и другую секретную информацию и пароли.

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

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


Перевод статьи theNightwing: Hiding Secret Keys and Passwords in Python

Предыдущая статья8 главных качеств технического менеджера
Следующая статьяТри библиотеки для удаления неиспользуемого CSS