从安全的角度来看,我对如何正确记录客户端-服务器应用程序的客户端部分(Java Swing)的错误进行了辩论。
我认为将异常和堆栈跟踪等错误细节暴露给“不受信任”的用户是一种不好的做法,并且至少会通过信息泄露(内部结构、依赖项等)削弱您的应用程序安全性,这是常识。
服务器端的解决方案可以通过确保不向用户公开任何错误详细信息并将详细信息安全地存储在服务器上来解决。这样,在需要时,专门的人员可以在调查期间查找错误详细信息。
但是,如何在不将错误信息暴露给用户的情况下将错误详细信息存储在客户端上呢?
我想到了几件事,但每件事在某些方面都有缺陷。
- 将错误详细信息发送到存储它们以供以后查找的专用服务器。
- 如何发送通信层问题的错误详细信息(根本无法进行外部通信)?
- 无法从客户端网络访问您的日志服务器(防火墙规则、代理等)。
- 非对称加密错误详情
- 记录期间的潜在性能影响。
- 错误调查过程中必须解密错误细节,这使得过程更加繁琐。
另一方面,您可以争辩说,从客户端应用程序公开错误详细信息不如从服务器应用程序公开错误详细信息那么重要。
- 用户已经有权访问可用于收集内部信息(逆向工程)的客户端二进制文件。
- 大多数通信细节可以通过嗅探客户端和服务器之间的流量来收集。
- 关于客户端应用程序的内部知识(在大多数情况下)不如关于服务器的有价值,因为客户端主要充当 UI,而基本业务逻辑驻留在服务器上。
从安全的角度来看,在客户端存储错误详细信息的“最佳实践”或最佳折衷方案是什么?或者换一种说法,是否值得为客户端应用程序隐藏错误详细信息(异常、堆栈跟踪等)?