-1

不久前,我和我的朋友又发生了争执。他声称,由于 Java 使用的网络堆栈,Java 极其不安全。他说天气与否你使用网络,这个网络堆栈是开放和运行的。并且在任何时候你有一个 Java 应用程序正在运行,有人可以通过网络堆栈劫持 JVM 并控制你的计算机。这些有道理吗?对不起,如果这不是一个“真正的”问题或细节有限,但这就是他告诉我的全部内容。

4

1 回答 1

2

由于这个 [在这里插入你最喜欢的诅咒] 和你一样困扰我,我创建了一个简短的测试程序:

public class Shullbit {
  public static void main( String[] args ) {
    while( true )  {
      System.out.println( "Still not convinced ?!?" );
      try {
        Thread.sleep(5000);
      }
      catch( Exception e ) {
        //
      }
    }
  }
}

启动此程序后,就坐在那里等待。这让我们有足够的时间来搜索开放的端口。我用这个 java 版本在 Ubuntu 14.04 上运行了代码:

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) Server VM (build 25.45-b02, mixed mode)

当我运行程序时,java -Dcom.sun.management.jmxremote Shullbit我可以看到一个端口已打开:

sudo netstat -anop | grep java
tcp6       0      0 :::56066                :::*                    LISTEN      18797/java       off (0.00/0/0)
unix  2      [ ]         STREAM     CONNECTED     30209    18797/java

但这是意料之中的,因为我们告诉 Java 这样做。而且这个端口默认只能在本地使用,并且可以通过 SSL、密码或客户端证书进行保护。

java Shullbit当我在没有开放端口的情况下运行相同的程序时:

sudo netstat -anop | grep java  | wc -l
0

所以告诉你的朋友要么回去工作要么上学;-)

于 2015-10-20T16:16:08.657 回答