Java 网络堆栈安全?
Java network stack security?
前段时间我和朋友又吵了一架。他声称 Java 由于其使用的网络堆栈而极度不安全。他说不管你是否使用网络,这个网络栈都是开放的 运行。在任何时候你有一个 Java 应用程序 运行,有人可以通过网络堆栈劫持 JVM 并控制你的计算机。这些有道理吗?抱歉,如果这不是 "real" 问题或细节有限,但他告诉我的就这些了。
因为这个[在这里插入你最喜欢的咒语]让我和你一样烦恼我创建了一个简短的测试程序:
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
所以告诉你的朋友要么回去工作要么回去上学 ;-)
前段时间我和朋友又吵了一架。他声称 Java 由于其使用的网络堆栈而极度不安全。他说不管你是否使用网络,这个网络栈都是开放的 运行。在任何时候你有一个 Java 应用程序 运行,有人可以通过网络堆栈劫持 JVM 并控制你的计算机。这些有道理吗?抱歉,如果这不是 "real" 问题或细节有限,但他告诉我的就这些了。
因为这个[在这里插入你最喜欢的咒语]让我和你一样烦恼我创建了一个简短的测试程序:
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
所以告诉你的朋友要么回去工作要么回去上学 ;-)