当前位置:  开发笔记 > 编程语言 > 正文

Java有缓冲区溢出吗?

如何解决《Java有缓冲区溢出吗?》经验,为你挑选了5个好方法。

Java有缓冲区溢出吗?如果是,你可以给我一些情景吗?



1> Michael Borg..:

由于Java Strings基于char数组而Java自动检查数组边界,因此只有在不常见的情况下才能进行缓冲区溢出:

    如果您通过JNI调用本机代码

    在JVM本身(通常用C++编写)

    解释器或JIT编译器无法正常工作(Java字节码强制边界检查)



2> Brian Rasmus..:

诸如Java和C#之类的托管语言没有这些问题,但实际运行代码的特定虚拟机(JVM/CLR/etc)可能会出现这些问题.


不安全上下文中的C#可能会出现缓冲区溢出.Java作为一种语言完全禁止这种情况(您必须通过JNI更改语言才能获得无人指针访问)

3> coobird..:

出于所有意图和目的,没有.

Java具有数组边界检查,它将检查无法从分配的数组之外的区域访问数据.当一个人试图访问超出数组大小的区域时,ArrayOutOfBounds将抛出异常.

如果存在缓冲区溢出,则可能是来自Java虚拟机中的错误,据我所知,并不是Java语言规范和Java虚拟机规范中编写的预期行为.



4> BobbyShaftoe..:

是的,不是.不,因为它是一个托管内存模型,你无法真正创建错误的自己打开缓冲区溢出漏洞.但是,JVM和JDK中可能存在缓冲区溢出漏洞.看到这个Secunia顾问:

http://secunia.com/advisories/25295



5> ShuggyCoUk..:

严格意义上的覆盖堆栈或堆本身的缓冲区溢出需要:

    框架中的一个错误(这些错误在过去已经存在,可能会再次出现)

    使用JNI(基本上不再使用托管代码)

缓冲区溢出在某种意义上说,你有使用缓冲区的代码,你的代码负责正确解析它但是没有这样做是可能的.例如,您可能会编写一个XML解析器,并且有人可能会向您提供格式错误(或合法但不常见)的请求,由于您的解析器的设计会覆盖先前验证的数据以及某些有效负载,这会导致您的应用程序行为异常.

后一种形式不太可能,但编写得很糟糕的sql字符串清理功能广泛分布,有一个问题,如这将是一个诱人的目标.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有