【问题标题】:How do I securely collect logs from a front end web client?如何从前端 Web 客户端安全地收集日志?
【发布时间】:2019-11-01 07:26:59
【问题描述】:
我有一个 Web 应用程序,我需要安全地记录所有用户活动。我需要知道他们何时访问特定页面并采取特定操作,例如单击按钮。如果我让前端将此数据发送到后端,则用户很容易阻止该请求被发送出去。我需要实现可靠。我曾考虑将实现带到后端,但端点非常通用,并不表示用户在前端采取的具体操作。我知道这确实是一个开放式问题,但任何想法都将不胜感激。
【问题讨论】:
标签:
frontend
backend
audit-trail
audit-logging
【解决方案1】:
1. 基本上,当需要记录前端时,大多数时候像 slf4j、log4j2 之类的库应该足以记录活动。您可能希望将记录器放在 servlet 过滤器级别,然后将其部署为平常。
2.如果您还想更安全,您可以使用像datadog这样的应用程序监控工具并捕获活动。
无论如何,前端类必须与记录器挂钩。
【解决方案2】:
在信息安全方面,必须使用 HTTPS 连接向服务器发送消息,因此不可能有 MITM 攻击,并且对数据进行了编码。
考虑到可靠性,您可以使用服务工作者来累积和发送某种事件。使用同一域进行日志记录将阻止业余用户进行全局消息阻止。某种消息散列(例如“通过默默无闻的安全性”)可以将服务从内容正则表达式解决方案中拯救出来。
关于服务器滥用:据我所知,没有好的解决方案,因为用户输入应该始终被过滤和清理,只能期望该功能不会成为黑客攻击的目标。
让我们做一个心理实验:有人从前端发现了数据流,并试图攻击该站点。如我所见,有几种方法可以做到这一点:
端点上的 DDOS,但它不会进行大量 CPU 受限操作,虽然可能是 i/o 受限,但端点速率限制可以解决问题。
试图进行某种 SQL 注入的格式错误的数据。这种攻击可以通过接受严格的规则和消息格式来解决。
格式错误的数据试图破坏服务的指标,但作为攻击目标使该网站成为某种大型服务,因此指标计算的 99.9% 可能会忽略那些分布异常值。
因此,主要的攻击向量并不能轻易地为黑客提供一些好处,尤其是当服务是一个黑盒时,是什么让对功能的任何攻击都毫无用处。