java - 标准 Java 是否能够免受 memcpy 安全缺陷(例如最近的 open ssl 心跳缺陷)的影响?

标签 java c security heartbleed-bug

最近,openssl 库被揭露存在严重缺陷,使攻击者能够读取高达 64KB 的内存。

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

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

如果我们假设标准库(不调用 C),Java 是否能够免受这些类型的安全缺陷的影响?

为了更具体地说明安全缺陷的类型,我不是指信任用户输入,而是指特定的有限内存访问。

最佳答案

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

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

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

根本问题是信任用户输入,这可能发生在任何语言和各种上下文中,例如SQL注入(inject)。

关于java - 标准 Java 是否能够免受 memcpy 安全缺陷(例如最近的 open ssl 心跳缺陷)的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22945406/

相关文章:

java - Spring MVC - @Autowired 是如何工作的?

java - 从java文件写入xml

c - C中多数组的存储映射函数

javascript - 利用 JavaScript 的 eval() 方法

java - 如何制作可在其他项目中使用的多个类的单个 jar 文件

java - 运行驻留在服务器上的 Java 程序

c - while循环中的两个条件是什么?

c - strtok c 多个字符作为一个分隔符

php - 为什么 codeigniter2 不以更安全的方式(例如 session )存储 csrf_hash?

javascript - Firefox Scratchpad 的 javascript 代码比标准网站 javascript 代码拥有更多权限?