-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