跳转到主要内容

从回溯中删除局部变量

项目描述

sensitive_variables - 从回溯中删除局部变量

Build Status PyPi page link -- version

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")

结果是

Picture of Sentry's traceback view where each frame contains local variables. The password variable contains a placeholder instead of the actual value.

自定义清理函数

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 (5.7 kB 查看哈希值)

上传时间 源代码

构建分发

sensitive_variables-0.1.4-py3-none-any.whl (4.9 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面