python - Sentry - 清理局部变量敏感数据
问题描述
我想在将敏感数据发送到 Sentry 之前从 Python 中清除敏感数据
但是,在方法中before_send
,truncate_breadcrumb_message
我不确定在哪里可以获得局部变量列表并清理它们。
sentry_sdk.init(
dsn=settings.get('SENTRY_DSN', ""),
before_breadcrumb=truncate_breadcrumb_message,
integrations=[FlaskIntegration()],
before_send=sanitize_sentry_event,
)
def sanitize_sentry_event(event, hint):
pass
def truncate_breadcrumb_message(crumb, hint):
pass
def raise_execption(password):
auth = 5
raise Exception()
在上述方法中,我根本不希望将密码和身份验证发送到 Sentry。
我该怎么做?
解决方案
event
是一个 JSON 有效负载,其中包含您在 Sentry 的 UI 中的“JSON”下载中看到的完全相同的 JSON。所以你有一个这样的事件:
{
"exception": {
"values": [
{
"stacktrace": {
"frames": [
{"vars": ...}
]
}
}
]
}
}
而你想删除vars
,你需要这样做:
def sanitize_sentry_event(event, hint):
for exception in event.get("exception", {}).get("values", []):
for frame in exception.get("stacktrace", {}).get("frames", []):
frame.pop("vars", None)
for exception in event.get("threads", {}).get("values", []):
for frame in exception.get("stacktrace", {}).get("frames", []):
frame.pop("vars", None)
return event
您可能想用 try-except 包装整个函数体。如果函数引发异常,则删除事件。确保使用它来测试它init(debug=True)
以查看您的before_send
钩子可能抛出的所有异常
推荐阅读
- php - PHP用新结构对多维数组的内容进行分组
- kubernetes - 在 Google Kubernetes Engine 中运行单个 Kubernetes 节点需要多少个 Pod?
- java - JavaFX 音频文件路径
- go - Go DynamoDB Expression Add 无法添加到列表
- python - 使用 Xonsh 在 VSCode 终端中激活 Conda 环境
- mysql - 如何在 Rails 5.2 中从 mysql 查询数组列?
- javascript - 在 javascript 方法中,在 jquery 中向 body 添加类失败
- javascript - Tree massiv 获取元素的所有链接
- pandas - 连接时出现 Unicode 解码错误
- java - JPA 多对一关系更新父级中的聚合列