- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当信任边界 交叉时,是否可以通过 Java Exceptions
公开敏感的应用程序或系统信息?
我的意思是,不仅是理论上,而且如果这种情况发生在真实环境中。
例如java.io.FileNotFoundException
可能会告诉调用者我的应用程序的文件系统结构等。java.util.ConcurrentModificationException
可能会提供有关我的应用程序的非线程安全类的信息。
这种情况是否可以通过以下两种方式处理?
使用 Sysouts
(仅带有自定义消息)而不是抛出异常
来处理应该被其他人访问的代码?
如果必须抛出异常,请清理您的消息然后抛出异常
我也想知道第 2 点是否是完全可以避免的,并且不会有任何强制抛出异常的情况。
我的问题不是关于任何特定的应用程序,而是一般的编程实践(大型企业如两家不同的银行等需要应用程序间通信的地方)。
最佳答案
暴露敏感信息的最常见方式是为程序的用户(客户端)提供堆栈跟踪。
堆栈跟踪对于调试问题的程序员很有用,但对其他任何人都没有用。因此,日志代码理所当然不应输出堆栈跟踪。只有当异常指示程序中存在错误时,它才应该输出它们。它应该将它们输出到程序员可以使用的地方,但尽可能少地提供给其他人。
如果程序的日志文件对程序的普通用户不可见但对管理员可见(服务器就是这种情况),那么这是记录堆栈跟踪的合适位置。
类似的争论也适用于其他敏感信息。
虽然您的问题完全是关于安全问题,但这也可以被视为用户体验(用户界面)问题:您向程序的不同用户提供的消息应该适合这些用户,并且应该为他们提供对他们有用的信息,without extraneous information that could confuse them .特别是,the message text of an exception should not be reported to users (但应作为任何堆栈跟踪的一部分包含在内)。
对于客户端-服务器程序,客户端对服务器未能处理客户端发送的请求的细节不感兴趣。他们需要知道请求确实失败了。如果请求失败是因为服务器的问题,而不是客户端的错误请求,他们需要知道是这种情况,以便他们可以联系管理员修复服务器。如果请求失败是因为客户端发送了错误的请求,则应告知客户端这一点,并说明请求的错误之处,以便客户端可以发送更正的请求。
另外,请注意 not all exceptions indicate a problem that some user must be told about .如果程序自动处理由异常发出信号的情况,在许多情况下根本不需要告诉用户异常发出信号的情况。
关于java - 可能通过 Java 异常暴露敏感信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672849/
我这里有一些(遗留)代码,似乎在LD_LIBRARY_PATH上调用setenv(其值在编译时未知,实际上它将从命令中获取)行),现在我必须将其移植到 Windows。我怀疑 setenv 只是出于历
我在 SSIS 包上有一个敏感字符串参数,用于存储远程服务器的密码。 但是,当字符串值包含花括号时,作业代理会在配置该步骤的包参数时抛出错误: Microsoft SQL Server Managem
我们都非常了解 strictfp 的工作原理。 像这样: package com.hk.basicjava.tests.strictfp; import java.util.*; public cla
我正在对我的博客进行简单搜索。我使用亚美尼亚语,当我搜索时,这些字母总是很敏感。这是我的代码的一部分。提前谢谢你。 search_query = get.get('search') query_lis
我正在对我的博客进行简单搜索。我使用亚美尼亚语,当我搜索时,这些字母总是很敏感。这是我的代码的一部分。提前谢谢你。 search_query = get.get('search') query_lis
想象一下这个非常基本的可拖放设置: #dropArea 是可放置的。 #itemBox > .item 是可拖动对象。 由于某种原因,droppable
我有这样的网址: http://quickstart.local/public/category1/product2 并且在 url (category1/product2) 数字是 id ,从数据库
我是一名优秀的程序员,十分优秀!