有一种简单的方法可以完全锁定大量 JVM:
class runhang {
public static void main(String[] args) {
System.out.println("Test:");
double d = Double.parseDouble("2.2250738585072012e-308");
System.out.println("Value: " + d);
}
}
或者,挂起编译器:
class compilehang {
public static void main(String[] args) {
double d = 2.2250738585072012e-308;
System.out.println("Value: " + d);
}
}
正如这里所解释的:http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/
我的问题很简单:您知道哪种精心设计的 Web 应用程序实际上会受到此影响?
换句话说:攻击者可以在哪种类型的 Web 应用程序上执行攻击拒绝服务利用那个已知的弱点?
很糟糕,很糟糕。但除了使用浮点进行货币计算的程序员之外,我没有看到很多 Java 支持的网站会崩溃。
我可以看到玩具科学小程序是候选者,但除此之外......
这是被阻止线程的 threadump(在 Linux 上使用“kill -3”完成):
"main" prio=1 tid=0x09ab8a10 nid=0x57e9 runnable [0xbfbde000..0xbfbde728]
at sun.misc.FDBigInt.mult(FloatingDecimal.java:2617)
at sun.misc.FloatingDecimal.multPow52(FloatingDecimal.java:158)
at sun.misc.FloatingDecimal.doubleValue(FloatingDecimal.java:1510)
at java.lang.Double.parseDouble(Double.java:482)
EDIT
JVM 锁定于此:
java版本“1.5.0_10”
Java(TM) 2 运行时环境,标准版(内部版本 1.5.0_10-b03)
Java HotSpot(TM) 服务器 VM(内部版本 1.5.0_10-b03,混合模式)
java版本“1.6.0_17”
Java(TM) SE 运行时环境(版本 1.6.0_17-b04)
Java HotSpot(TM) 服务器 VM(内部版本 14.3-b01,混合模式)