-1
前一段時間我和我的朋友進入了另一場爭論。他聲稱Java由於其使用的網絡堆棧而非常不安全。他說,天氣還是不是你使用網絡,這個網絡堆棧是開放和運行的。在任何時候你有一個Java應用程序在運行,有人可以通過網絡堆棧劫持JVM並控制你的計算機。這是否有任何事實?對不起,如果這不是一個「真正的」問題,或者是對細節的限制,但他只是告訴了我。Java網絡堆棧安全性?
前一段時間我和我的朋友進入了另一場爭論。他聲稱Java由於其使用的網絡堆棧而非常不安全。他說,天氣還是不是你使用網絡,這個網絡堆棧是開放和運行的。在任何時候你有一個Java應用程序在運行,有人可以通過網絡堆棧劫持JVM並控制你的計算機。這是否有任何事實?對不起,如果這不是一個「真正的」問題,或者是對細節的限制,但他只是告訴了我。Java網絡堆棧安全性?
由於這[在此填上自己喜歡的詛咒]我的錯誤一樣,因爲它做了你我創建了一個短的測試程序:啓動該程序
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
所以告訴你的朋友要麼回去上班或上學;-)
我投票關閉這個問題作爲題外話題,因爲它是關於jvm的安全性,而不是關於編程。另外,太寬泛。如果你有一個更具體的聲明,你想看到的答案是有專門的安全堆棧交換。 – njzk2
你的朋友聽起來很困惑,但要回應這樣一個不明確的說法是非常困難的,特別是在SO問題/回答格式中。 –
胡言亂語在最好的和偏離主題。證明他錯了,然後啓動一個Java程序,然後運行netstat或tcpview – Marged