前端操作需要记录安全日志吗?怎么记才合规?

春莉 ☘︎ 阅读 11

我们最近在做等保测评,安全团队要求所有用户敏感操作都要留痕。但我在前端用 console.log 记的日志根本传不到后端,这算合规吗?

尝试过在关键按钮点击时发个埋点请求,但不知道该记哪些字段。比如删除数据的操作,我这样上报:

fetch('/api/audit-log', {
  method: 'POST',
  body: JSON.stringify({
    action: 'delete_user',
    userId: currentUser.id,
    timestamp: Date.now()
  })
})

但安全同事说缺了IP和UA信息,这些前端能拿到吗?还是说日志根本不该由前端负责?有点懵。

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
公孙广云
前端记安全日志这事儿吧,说句实在话的,你们安全同事说得对,前端单独记的日志根本不算合规。

为什么呢?前端日志太容易篡改了,用户浏览器上想怎么改怎么改,攻击者分分钟给你清空或伪造。合规的安全日志必须是后端生成的,后端日志才是可信的证据链。

所以正确的做法是:前端只负责传一个信号,告诉我后端"用户执行了某个操作",具体的日志内容由后端统一记录。后端能拿到的信息比前端全多了:

关于IP和UA,前端确实能通过 navigator.userAgent 拿到UA,但IP前端拿不到准确的了(除非有特殊配置)。而且这些信息让后端直接取更靠谱,后端可以从请求头里拿真实IP(注意X-Forwarded-For头),从request对象里拿UA,不用前端传。

你们后端记录日志至少要包含这些字段:

action操作类型、operator操作人ID、target操作目标、ip地址、userAgent、timestamp时间、操作结果、请求ID方便追踪

具体实现上,敏感操作别让前端发两个请求(业务请求+日志请求),直接在后端做:用户执行删除操作时,后端在处理业务逻辑的同时记一条日志,这才是合规的做法。

简单说就是前端传必要参数,后端统一生成完整日志,前端别自己在那儿记。
点赞
2026-03-20 11:03