Est-ce que Java a des débordements de mémoire tampon? Si oui pouvez-vous me donner des scénarios?
Réponses
Trop de publicités?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:
- Si vous appelez du code natif via JNI
- Dans la machine virtuelle elle-même (généralement écrite en C ++)
- L'interpréteur ou le compilateur JIT ne fonctionne pas correctement (vérifications des limites obligatoires du bytecode Java)
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.
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:
Un dépassement de tampon dans le sens strict de remplacer la pile ou le tas lui-même aurait besoin:
- Un bug dans le cadre de ces ont existé dans le passé et pourrait bien à nouveau)
- 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.