在以下情况下,什么是确保信息安全性和完整性的好解决方案:
Java应用程序需要做一些初始工作,然后将凭据(例如,用户名和密码)传递给Shell命令,该命令将进行一些处理(可能通过https发出请求,以及其他操作),然后将私有令牌返回给Java应用程序。
在此讨论中,我们假设shell命令的功能如果不付出合理的努力就无法在Java中复制,并且其中大多数是封闭源代码。
什么是确保凭据和令牌都不会轻易被第三方劫持的好方法?
假定可以根据需要在Java应用程序和shell命令中对IO进行自定义。
Saki和Untergunter中的图标
最佳答案
这里最安全的解决方案是在进程之间使用管道,即通过stdin将用户名和密码传递给子进程,并从其stdout中读取令牌。
说明:您有四个选项可以在进程之间传递数据:
命令行参数
档案
管子
共享内存
解决方案1不好,因为同一台计算机上的每个人都可以使用简单的ps -ef
看到所有进程的参数。
文件更好,但是您需要谨慎使用权限。如果这只是一个问题,并且是Unix文件系统,则可以创建文件文件并删除它而无需关闭。那会给你一个文件句柄,只有你的进程才能看到。但是您不能将此句柄传递给其他进程。
共享内存太复杂,无法设置。
管道是一种共享内存,但是OS和所有API已经为您设置了管道。通过管道传递的数据仅对所涉及的两个进程可见,而对其他两个进程则不可见(好吧,攻击者可以安装内核模块,但如果可能的话,无论您做什么,您都没有任何安全性)。