2015-10-20 85 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 

所以告訴你的朋友要麼回去上班或上學;-)