103 votes

Est-ce que Java a des débordements de mémoire tampon?

Est-ce que Java a des débordements de mémoire tampon? Si oui pouvez-vous me donner des scénarios?

118voto

Michael Borgwardt Points 181658

Puisque les chaînes de caractères Java sont basées sur des tableaux de caractères et que Java vérifie automatiquement les limites des tableaux, les dépassements de mémoire tampon ne sont possibles que dans des scénarios inhabituels:

  1. Si vous appelez du code natif via JNI
  2. Dans la machine virtuelle elle-même (généralement écrite en C ++)
  3. L'interpréteur ou le compilateur JIT ne fonctionne pas correctement (vérifications des limites obligatoires du bytecode Java)

29voto

Brian Rasmussen Points 68853

Les langages gérés tels que Java et C # ne rencontrent pas ces problèmes, mais les machines virtuelles spécifiques (JVM / CLR / etc.) qui exécutent réellement le code peuvent le faire.

14voto

coobird Points 70356

Pour toutes fins utiles, non.

Java a la matrice de vérification des limites qui va vérifier que les données ne peuvent pas être accessibles à partir de la zone à l'extérieur de l'allocation d'un tableau. Quand on essaie d'accéder à la zone qui est au-delà de la taille de la matrice, une ArrayOutOfBounds exception sera levée.

Si il y a un tampon de saturation, c'est probablement d'un bug dans la Machine Virtuelle Java, et est, à ma connaissance, pas le comportement souhaité est écrit dans le Langage Java, Spécifications, ni la Machine Virtuelle Java cahier des charges.

10voto

BobbyShaftoe Points 19925

Oui et non. Non, en ce sens que vous ne pouvez pas vraiment vous ouvrir par erreur à une vulnérabilité de débordement de mémoire tampon, car il s'agit d'un modèle de mémoire gérée. Cependant, il peut exister des vulnérabilités de dépassement de mémoire tampon dans la JVM et le JDK. Voir cet avis Secunia:

http://secunia.com/advisories/25295

9voto

ShuggyCoUk Points 24204

Un dépassement de tampon dans le sens strict de remplacer la pile ou le tas lui-même aurait besoin:

  1. Un bug dans le cadre de ces ont existé dans le passé et pourrait bien à nouveau)
  2. L'utilisation de JNI (essentiellement de ne plus utiliser du code managé)

Un dépassement de tampon dans le sens que vous avez le code à l'aide d'un tampon et de votre code est responsable de l'analyse correctement, mais ne parviennent pas à le faire est possible. Par exemple, Vous pourriez écrire un analyseur XML et quelqu'un pourrait vous fournir avec un mal formé (ou légitime, mais rare) demande, en raison de la conception de votre analyseur écrase déjà validé des données avec certains de charge utile qui serait la cause de votre application à mal se comporter.

Cette dernière forme est moins probable, mais un mal écrit chaîne sql nettoyage de la fonction largement distribué qui ont eu un problème comme ce serait une invitation à la cible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X