前端操作需要记录安全日志吗?怎么记才合规?
我们最近在做等保测评,安全团队要求所有用户敏感操作都要留痕。但我在前端用 console.log 记的日志根本传不到后端,这算合规吗?
尝试过在关键按钮点击时发个埋点请求,但不知道该记哪些字段。比如删除数据的操作,我这样上报:
fetch('/api/audit-log', {
method: 'POST',
body: JSON.stringify({
action: 'delete_user',
userId: currentUser.id,
timestamp: Date.now()
})
})
但安全同事说缺了IP和UA信息,这些前端能拿到吗?还是说日志根本不该由前端负责?有点懵。
为什么呢?前端日志太容易篡改了,用户浏览器上想怎么改怎么改,攻击者分分钟给你清空或伪造。合规的安全日志必须是后端生成的,后端日志才是可信的证据链。
所以正确的做法是:前端只负责传一个信号,告诉我后端"用户执行了某个操作",具体的日志内容由后端统一记录。后端能拿到的信息比前端全多了:
关于IP和UA,前端确实能通过
navigator.userAgent拿到UA,但IP前端拿不到准确的了(除非有特殊配置)。而且这些信息让后端直接取更靠谱,后端可以从请求头里拿真实IP(注意X-Forwarded-For头),从request对象里拿UA,不用前端传。你们后端记录日志至少要包含这些字段:
action操作类型、operator操作人ID、target操作目标、ip地址、userAgent、timestamp时间、操作结果、请求ID方便追踪
具体实现上,敏感操作别让前端发两个请求(业务请求+日志请求),直接在后端做:用户执行删除操作时,后端在处理业务逻辑的同时记一条日志,这才是合规的做法。
简单说就是前端传必要参数,后端统一生成完整日志,前端别自己在那儿记。