标准的Java是否免受像最近开放的ssl心跳漏洞那样的memcpy安全漏洞的影响?

时间:2014-04-08 18:31:21

标签: java c security heartbleed-bug

最近,图书馆openssl被发现有一个严重的缺陷,使攻击者能够读取高达64KB的内存。

http://blog.existentialize.com/diagnosis-of-the-openssl-heartbleed-bug.html

原因似乎是由于使用了memcpy而没有交叉检查攻击者提供的输入大小。

如果我们假设标准库(不调用C),Java是否对这些类型的安全漏洞免疫?

为了更具体地说明安全漏洞的类型,我并不是指信任用户输入,而是特别限制了内存访问。

1 个答案:

答案 0 :(得分:3)

Java更安全,因为它不使用指针算法,进行边界检查,并且不会(通常)允许访问任意内存块(参见sun.misc.Unsafe!)。< / p>

但是,原则上,如果根据不受信任的客户端提供的偏移量从数组,ByteBuffer等读取和写入字节,则可能会出现类似的问题。问题大大减少了,因为人们只能攻击该数组(或类似容器)范围内的数据而不是任意相邻对象中的数据。

即使使用Unsafe,人们通常也会安全,因为人们倾向于使用它来分配和访问一组非常特定的性能关键对象,而不是整个应用程序(包括加密密钥,密码等)。

基本问题是信任用户输入,并且这可能发生在任何语言和各种各样的上下文中,例如SQL注入。