我刚才和朋友谈了另一个争论。他声称Java由于它使用的网络堆栈而非常不安全。他说天气与否你使用网络,这个网络堆栈是开放和运行的。并且在任何时候运行Java应用程序,有人可以通过网络堆栈劫持JVM并控制您的计算机。这有什么事实吗?很抱歉,如果这不是一个“真实”的问题,或者仅限于细节,那就是他告诉我的全部内容。
答案 0 :(得分: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
告诉你的朋友要么回去上班,要么上学; - )