回溯中的条带局部变量

sensitive-variables的Python项目详细描述


敏感的_变量-删除回溯中的局部变量

Build StatusPyPi page link -- version

sensitive_variables是一个可以应用于 防止调试工具读取某些局部变量,如 Django crash reporterSentry

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

结果:

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

它是如何工作的?

当修饰函数抛出异常时,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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从Struts操作的钩子更改表单值(Liferay 6.2)   java如何改变Spring MVC处理url“点”字符的行为   Clojure中使用Java接口的问题   junit如何模拟comosDB azure java集成客户端?   运行函数时发生java错误   netbeans Java。jar文件和依赖项   Eclipse中文本字段中的java输入类型   在JAVA中,将集合变量从实时批处理运行时传递到调用批处理文件   java通过Bean验证API中的自定义消息管理异常   XML到json的转换,在Java中,同时保留数据类型   根据JAVA中的列名从Excel文件中获取单元格值   在AsyncTask的doInBackground中未调用java FirebaseMessagingService   java如何在数据库中插入一行?