我试图找到一种好方法来处理__init__()
中的错误,而不必在回溯中暴露敏感数据。你知道吗
我有一个基于pxsh的类,我在__init__()
中执行连接。
其目的是初始化用于向子对象发送CLI命令的对象。你知道吗
class MyClass(pxssh.pxssh):
def __init__(self, credentials):
.
.
.
try:
self.connect(credentials)
except Exception as e:
stderr.write('Error: %s\n' % str(e)
exit(1)
这对于测试来说很好,但是这个类是要被其他代码使用的,我不想用exit(1)
杀死调用者。你知道吗
我会使用raise
而不是exit(1)
,但问题是credentials
是一个包含密码和其他一些敏感连接信息的字典。我不想看到它在回溯中被丢弃,如果调用者只是提出我抛出的任何异常。你知道吗
处理这种情况最好的方法是什么?你知道吗
谢谢你!你知道吗
您可以捕获异常,清除敏感信息,然后重新引发:
这将清空
credentials
字典;对它的任何其他引用也将显示它现在是空的。任何包含本地值的回溯格式化程序都将显示一个空字典。你知道吗但是,请注意,这并不能保护您不被泄露,因为任何恶意代码都可以在异常发生之前的任何时间安装^{} hook 并访问
credentials
。你知道吗或者攻击者可以简单地用包装器替换
MyClass.__init__
,该包装器在调用原始版本之前捕获并存储credentials
值。这同样适用于MyClass.connect()
方法。你知道吗Python的动态特性使得它完全不适合尝试保护您的值不受攻击者的攻击,而攻击者已经是您进程的一部分。你知道吗
相关问题 更多 >
编程相关推荐