Java安全地执行shell命令

时间:2014-02-26 15:43:09

标签: java security shell

在以下情况下,确保信息安全性和完整性的良好解决方案是什么:

Figure 1

Java应用程序需要做一些初始工作,然后将凭据(例如,用户名和密码)传递给shell命令,该命令将执行一些处理(可能通过https发出请求,以及其他操作)然后返回Java应用程序的私有令牌 让我们假设在这个讨论中,如果没有合理的努力,shell命令的功能就无法在Java中复制,而且大多数都是封闭源代码。

确保第三方不会轻易劫持凭据和令牌的良好方式?
假设可以在Java应用程序和shell命令中根据需要自定义IO。


来自Saki&的图标

Untergunter

1 个答案:

答案 0 :(得分:4)

这里最安全的解决方案是在进程之间使用管道,即通过stdin将用户名和密码传递给子进程,并从它的stdout读取令牌。

说明:您有四个选项可在进程之间传递数据:

  1. 命令行参数
  2. 文件
  3. 共享内存
  4. 解决方案#1很糟糕,因为同一台计算机上的每个人都可以使用简单ps -ef查看所有流程的参数。

    文件更好,但您需要小心权限。如果这只是一个单进程问题和Unix文件系统,您可以创建文件文件并删除它而不关闭。这会给你一个文件句柄,只有你的进程可以看到。但是您无法将此句柄传递给其他进程。

    共享内存太复杂而无法设置。

    管道是一种共享内存,但操作系统和所有API已经为您设置了它们。通过管道传递的数据只对所涉及的两个进程可见,而且没有其他人(好吧,攻击者可以安装内核模块但是如果可能的话,无论你做什么,你都没有任何安全性。)< / p>