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