如何隐藏java异常中的敏感细节?是否只能通过将异常包装为另一个来实现?
如果是这样,这究竟是如何隐藏异常的,因为如果我对异常@ debug时间进行监视,我将能够看到有关旧异常的所有信息以及我用它包装的那个,不是吗?
BTW,这不像ASP.NET,我可以调用Response.Write(“”)来写一个友好的字符串到网页/响应流。这是一个java插件,位于基于java web的应用程序中(使用内置服务器安装的那种)。由于
答案 0 :(得分:2)
我不确定您是否应该依赖任何语言机制或VM机制来保护敏感数据以防止此类入侵。如果一个人正在使用调试器,他们可以在生成异常的地方放置一个断点并查看数据。
最大的风险是未捕获的异常会流到生产用户可以看到它的位置,或者(通常一样糟糕),它可以存储在日志消息中。这方面的好例子是与数据库进行通信 - 很多时候,当出现任何类型的故障(即使是简单的超时)时,整个查询都会被记录下来。
恕我直言,出于这些原因,最好的做法可能是不将敏感数据存储在新的异常中,或者在您希望用敏感数据捕获异常的最低点创建新的异常,并创建一个处理旧异常并且不提供任何敏感数据的文件。
例如,如果在将包含敏感数据的查询提交到数据库的方法中创建异常,请不要存储实际的查询文本,或者用一些哈希替换参数(如果可能)。通过这种方式,您可以在不暴露数据内容的情况下找到重复违规者。
如果您使用的第三方组件将此类数据写入您控件之外的页面,则可能需要首先重新考虑使用该插件。据我所知,如果您在执行某些隐私政策的司法管辖区,如果您使用不符合这些政策的第三方工具,您仍可能要承担责任。