Я реализую класс, который представляет соединение, например, с 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
.Но я не совсем уверен.
Итак, вот мои вопросы:
Действительно ли этот метод создания лямбды действительно безопасен в том, что password
не можетможет быть восстановлено, даже если можно получить доступ к экземпляру Connection
?
Существует ли какая-либо «стандартная парадигма» для решения таких сценариев, когда метод должен вызываться несколько раз с чувствительнымаргумент, который никто не хочет хранить?
Заранее спасибо.