前端监控中如何过滤掉用户密码等敏感信息?

UI子博 阅读 9

我们项目接入了 Sentry 做错误监控,但发现有些报错堆栈里会意外带上用户输入的密码字段,比如表单提交失败时的请求 payload。虽然我们在代码里尽量避免记录敏感数据,但有时候第三方库或自动上报还是会漏掉。

我试过在 Sentry 的 beforeSend 里做字符串替换,但总觉得不保险。有没有更稳妥的方式?比如从源头上不让这些字段被收集?下面是我们表单样式的一部分:

.login-form input[type="password"] {
  border: 1px solid #ccc;
  padding: 8px 12px;
  width: 100%;
  box-sizing: border-box;
}

关键是,这类 input 的值会不会被某些监控脚本自动捕获?该怎么彻底屏蔽?

我来解答 赞 12 收藏
二维码
手机扫码查看
1 条解答
慕容沐希
我之前也碰到过这个问题,确实挺头疼的。Sentry 的 beforeSend 是一个好地方来处理,但你说得对,从源头屏蔽更靠谱。

首先,确保你的表单数据在发送前就被清理干净。你可以在提交表单的时候手动处理数据,去掉敏感字段。比如:

function handleSubmit(event) {
event.preventDefault();
const formData = new FormData(event.target);
const data = {};
formData.forEach((value, key) => {
if (key !== 'password') { // 这里假设密码字段名为 password
data[key] = value;
}
});
// 发送 data 到服务器
}


然后,对于 Sentry 或其他监控工具,可以在配置里明确排除这些字段。Sentry 提供了 beforeBreadcrumbbeforeSend 钩子,可以用来过滤数据。你可以这样设置:

Sentry.init({
dsn: 'YOUR_SENTRY_DSN',
beforeSend(event, hint) {
if (hint && hint.xhr && hint.xhr.method === 'POST') {
// 假设 POST 请求可能包含敏感数据
delete event.request.data.password;
}
return event;
},
beforeBreadcrumb(breadcrumb, hint) {
if (breadcrumb.category === 'ui.click' && breadcrumb.message.includes('password')) {
// 忽略点击事件中与密码相关的面包屑
return null;
}
return breadcrumb;
}
});


最后,确保你的监控脚本不会无意中抓取这些字段。检查一下是否有全局的输入监听器或者其他自动化工具可能会抓取表单数据。

这样多重防护应该能有效防止密码等敏感信息被收集到。希望这对你有帮助!
点赞
2026-03-23 06:01