我正在实现一个类,该类表示与API /数据库的连接,并希望提供一种在连接丢失(例如由于超时)时重新连接的方法。用户在初始化时提供用户名和密码,由于API要求,用户名和密码必须为纯文本。
我认为不应将密码存储在任何实例变量中;我知道one may use the “keyring” library,但是想知道是否有不依赖外部库的任何方式和/或以后无法通过任何方式透露密码。
我想到的一种方法是使用lambda创建器:
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()
为简单起见,我们假设某些API提供的连接过程password
仅使用api.connect
(这是原始密码)。
我尝试了inspect.showsource
,还检查了connection_handle
的其他属性。在我看来,password
的价值在任何地方都找不到。但是我不确定。
所以这是我的问题:
这种lambda创建者方法真的安全吗,即使人们可以访问password
的实例,也无法恢复Connection
?
当需要多次使用不希望存储的敏感参数来调用一种方法时,是否存在任何“标准范例”来应对这种情况?
谢谢。