回溯中的条带局部变量
sensitive-variables的Python项目详细描述
敏感的_变量-删除回溯中的局部变量
sensitive_variables
是一个可以应用于
防止调试工具读取某些局部变量,如
Django crash reporter或Sentry。
与django的sensitive_variables
不同,它独立于web框架
您使用并且也不依赖调试工具来了解decorator
为了工作。
fromsentry_sdkimportinitfromsensitive_variablesimportsensitive_variablesinit()@sensitive_variables('password')deflogin_user(username,password):print("Logging in "+username+" with "+password)# TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'login_user(None,"secret123")
结果:
它是如何工作的?
当修饰函数抛出异常时,sensitive_variables
遍历回溯,从frame.f_locals
中删除敏感数据并重新引发异常。
这通常不成问题,因为刚刚抛出异常的函数不太可能仍然使用其局部变量。
为什么我要在Django的装饰上用这个?
django有一个decorator,也称为sensitive_variables
,这个包的灵感来自于这个decorator。它向包含变量名的函数添加一个属性。
调试工具必须了解这个属性并尊重它。对于django以外的任何国家来说,情况都不太可能是这样。
这个装饰器总是可以工作的,因为它实际上修改了您的本地。
为什么我要用这个来代替哨兵的数据清理选项?
此装饰器不会将敏感数据的配置耦合到特定的崩溃报告工具。
decorator的行为很容易进行单元测试(参见
tests/
文件夹)。
为什么我不用这个?
这个decorator本质上要求为每个python实现定制代码。目前这只针对cpython 2.7、cpython 3.7和pypy2.7进行测试。
许可证
根据麻省理工学院授权,请参见LICENSE
。