Czy Java ma przepełnienia bufora?
Czy Java ma przepełnienia bufora? Jeśli tak, możesz podać mi scenariusze?
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:
- Jeśli wywołujesz natywny kod przez JNI
- w samym JVM (Zwykle pisanym w C++)
- interpreter lub kompilator JIT nie działa poprawnie (sprawdzanie ograniczeń kodu bajtowego w Javie)
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ą.
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.
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:
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:
- błąd w frameworku (istniały one w przeszłości i mogą być ponownie) [[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