从回溯中删除局部变量
项目描述
sensitive_variables - 从回溯中删除局部变量
sensitive_variables
是一个装饰器,您可以将它应用到您的函数中,以防止某些局部变量被调试工具读取,例如Django崩溃报告器或Sentry。
与Django的sensitive_variables
不同,它独立于您使用的Web框架,也不依赖于调试工具来知道装饰器才能工作。
用法
基本用法
from sentry_sdk import init
from sensitive_variables import sensitive_variables
init()
@sensitive_variables('password')
def login_user(username, password):
print("Logging in " + username + " with " + password)
# TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
login_user(None, "secret123")
结果是
自定义清理函数
sensitive_varibles
可以接收一个custom_scrub_fn参数,该参数将对每个局部变量进行调用。它接收局部值和变量名,并必须返回value_has_changed, new_value
。其中value_has_changed是一个表示值是否更改的布尔值,new_value是新的值。
您可以使用此功能扩展清理功能以用于字典和其他任何自定义类型。
示例
from sentry_sdk import init
from sensitive_variables import sensitive_variables
init()
def my_scrub_fn(value, variable_name):
if variable_name == 'password':
return True, 'scrubbed-value'
return False, value
@sensitive_variables(custom_scrub_fn=my_scrub_fn)
def login_user(username, password):
print("Logging in " + username + " with " + password)
# TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
login_user(None, "secret123")
它是如何工作的?
当装饰的函数抛出异常时,sensitive_variables
会遍历回溯,通过调用custom_scrub_fn从frame.f_locals
中删除敏感数据,以便进行自定义处理,然后重新抛出异常。
这通常不会成问题,因为刚刚抛出异常的函数不太可能继续使用其局部变量。
为什么我会选择这个而不是Django的装饰器?
Django有一个名为sensitive_variables
的装饰器,本包就是受其启发。它会在函数对象上设置一个包含变量名的属性。
调试工具必须了解此属性并尊重它。对于Django世界之外的一切,这种情况不太可能发生。
这个包中的装饰器始终有效,因为它实际上修改了您的局部变量。
为什么我要用它而不是Sentry的数据清洗选项?
-
此装饰器不会将敏感数据的配置绑定到特定的崩溃报告工具。
-
装饰器的行为易于单元测试(请参阅
tests/
文件夹)。
为什么我不使用这个?
此装饰器本质上需要为每种Python实现编写自定义代码。目前仅在CPython 2.7、CPython 3.6、CPython 3.7、CPython 3.8和PyPy 2.7上进行了测试。
许可
根据MIT协议授权,请参阅LICENSE
。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
sensitive-variables-0.1.4.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c6cba828e3d40769dfdb38a41c20a27e2df3da8541f6934a52349a8250dad93f |
|
MD5 | 655af9a5b23ecb3129c437b3c7a5e5d9 |
|
BLAKE2b-256 | 1d85234bc922dd1b243240a2ce0cd88685980a6942429ad233667e11b1243437 |
sensitive_variables-0.1.4-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8534c557da3c3f03096a3eabbdecdf3a5b704430351bc237dcbc55081eef44df |
|
MD5 | e7ff19eb4546b0c54103f9ef15a21b68 |
|
BLAKE2b-256 | e1542b75f7c7ceb487d86be66e29a277ffc0ebc414eebb2d55b47abedae28ef4 |