Python: защита аргумента пароля при необходимости нескольких вызовов - PullRequest
2 голосов
/ 16 апреля 2019

Я реализую класс, который представляет соединение, например, с API / базой данных, и хочу предоставить метод для повторного соединения, когда соединение потеряно (например, из-за тайм-аута).Пользователь предоставляет имя пользователя и пароль при инициализации, которые должны быть в необработанном тексте из-за требований API.

Я думаю, что НЕ следует хранить пароль в любой переменной экземпляра;Мне известно, что можно использовать библиотеку «keyring» , но мне было интересно, есть ли какой-либо способ, который не зависит от внешних библиотек и / или пароль не может быть позже раскрыт каким-либо образом.

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

class Connection:
    def __init__(self, *args, **kwargs):
         # other stuff
         password = input(“some message”)
         self.connection_handle = (lambda pass : (lambda : api.connect(password=pass))(password)
         del password
         self.conn = self.connection_handle()

    def reconnect(self):
         self.conn = self.connection_handle()

, где для простоты мы предполагаем, что password, который является необработанным паролем, используется какой-то процедурой подключения, предоставляемой API api.connect.

Я пытался inspect.showsource, а также проверял другие атрибуты connection_handle.Мне казалось, что нигде нельзя найти значение password.Но я не совсем уверен.

Итак, вот мои вопросы:

  1. Действительно ли этот метод создания лямбды действительно безопасен в том, что password не можетможет быть восстановлено, даже если можно получить доступ к экземпляру Connection?

  2. Существует ли какая-либо «стандартная парадигма» для решения таких сценариев, когда метод должен вызываться несколько раз с чувствительнымаргумент, который никто не хочет хранить?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...