2015-10-20 100 views
-1

前一段时间我和我的朋友进入了另一场争论。他声称Java由于其使用的网络堆栈而非常不安全。他说,天气还是不是你使用网络,这个网络堆栈是开放和运行的。在任何时候你有一个Java应用程序在运行,有人可以通过网络堆栈劫持JVM并控制你的计算机。这是否有任何事实?对不起,如果这不是一个“真正的”问题,或者是对细节的限制,但他只是告诉了我。Java网络堆栈安全性?

+3

我投票关闭这个问题作为题外话题,因为它是关于jvm的安全性,而不是关于编程。另外,太宽泛。如果你有一个更具体的声明,你想看到的答案是有专门的安全堆栈交换。 – njzk2

+2

你的朋友听起来很困惑,但要回应这样一个不明确的说法是非常困难的,特别是在SO问题/回答格式中。 –

+3

胡言乱语在最好的和偏离主题。证明他错了,然后启动一个Java程序,然后运行netstat或tcpview – Marged

回答

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) { 
     // 
     } 
    } 
    } 
} 

后只是坐在那里,等待。这让我们有足够的时间来搜索开放端口。 我跑在Ubuntu 14.04的代码与此Java版本:

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 

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