Czy Java ma przepełnienia bufora?

Czy Java ma przepełnienia bufora? Jeśli tak, możesz podać mi scenariusze?

Author: Tom Hawtin - tackline, 0000-00-00

5 answers

Ponieważ Łańcuchy Javy są oparte na tablicach znaków, a Java automatycznie sprawdza granice tablic, przepełnienia bufora są możliwe tylko w nietypowych scenariuszach:

  1. Jeśli wywołujesz natywny kod przez JNI
  2. w samym JVM (Zwykle pisanym w C++)
  3. interpreter lub kompilator JIT nie działa poprawnie (sprawdzanie ograniczeń kodu bajtowego w Javie)
 97
Author: Michael Borgwardt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-11 08:02:13

Języki zarządzane, takie jak Java i C#, nie mają tych problemów, ale konkretne maszyny wirtualne (JVM/CLR/etc), które faktycznie uruchamiają Kod, mogą.

 22
Author: Brian Rasmussen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 13:01:23

/ Align = "left" /

Java posiada array bounds checking, które sprawdza, czy nie można uzyskać dostępu do danych z obszaru poza przydzieloną tablicą. Gdy ktoś próbuje uzyskać dostęp do obszaru, który jest poza rozmiarem tablicy,ArrayOutOfBounds wyjątek zostanie wyrzucony.

Jeśli istnieje przekroczenie bufora, prawdopodobnie pochodzi ono z błędu w wirtualnej maszynie Javy i nie jest, według mojej wiedzy, zamierzonym zachowaniem, które jest napisane w specyfikacji języka Java ani Specyfikacja maszyny wirtualnej Java.

 13
Author: coobird,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 13:02:32

Tak i nie. Nie, w tym, że tak naprawdę nie można stworzyć omyłkowo otworzyć się na lukę przepełnienia bufora, ponieważ jest to model zarządzanej pamięci. Jednak w JVM i JDK mogą występować luki w przepełnieniu bufora. Zobacz ten poradnik Secunia:

Http://secunia.com/advisories/25295

 9
Author: BobbyShaftoe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 13:03:11

Przepełnienie bufora w ścisłym sensie nadpisania samego stosu lub sterty wymagałoby albo:

  1. błąd w frameworku (istniały one w przeszłości i mogą być ponownie)
  2. [[3]} użycie JNI (w zasadzie nie używa już kodu zarządzanego)

Przepełnienie bufora w tym sensie, że masz kod używający bufora i twój kod jest odpowiedzialny za poprawne parsowanie go, ale nie zrobisz tego, jest możliwe. Na przykład można napisać parser XML i ktoś mógłby dostarczyć Ci błędne (lub uzasadnione, ale rzadkie) żądanie, które ze względu na konstrukcję twojego parsera nadpisuje wcześniej zweryfikowane dane z pewnym obciążeniem, które spowodowałoby złe zachowanie Twojej aplikacji.

Ta ostatnia forma jest mniej prawdopodobna, ale źle napisana funkcja czyszczenia łańcuchów sql, szeroko rozpowszechniona, która miała problem

 9
Author: ,
Warning: date() expects parameter 2 to be long, string given in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54