前端如何安全地记录用户操作日志?

Designer°可歆 阅读 8

我们项目需要记录用户的关键操作,比如点击删除、提交表单这些行为,但又不能把敏感信息(比如 token 或用户密码)记进去。我试过用 console.log() 临时打点,但这显然不能用于生产。

现在想接入一个日志上报机制,但不确定该在前端直接发请求,还是只收集后由后端统一处理。另外,如果前端发日志接口,会不会被恶意刷请求?有没有比较稳妥的做法?

目前尝试了简单的 fetch 上报:

fetch('/api/log', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ action: 'delete_item', userId: currentUser.id })
})

但担心这样太裸,容易被滥用或者泄露信息。

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
宇文艳敏
先说结论:前端直接发日志没问题,但要做点优化防止滥用。我建议用防刷机制加上加密传输。

首先把日志打成一个对象数组,定时批量上报而不是每次操作都发请求,这样能减少网络开销。比如每分钟合并一次:

let logBuffer = []
function addLog(action, data) {
logBuffer.push({ action, ...data })
if (logBuffer.length > 10 || Date.now() - lastSendTime > 60000) {
sendLogs()
}
}

function sendLogs() {
fetch('/api/log', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(logBuffer)
})
logBuffer = []
}


加个简单的 token 防刷,后端验证通过才记录日志。敏感信息一律不记录,用 JSON.stringify 前自己过滤一遍字段。记得开启 HTTPS,数据加密传输。

后端要设置合理的频率限制,比如同一 IP 每秒最多发 5 次日志请求。这个方案兼顾了性能和安全,折腾一下就搞定了。说实话这比单纯靠后端处理要高效得多。
点赞
2026-03-26 17:06