Refleksja może być niebezpieczna - zobacz jak zniszczyć sobie życie

16 maja 2011, 20:10:28, Patryk Dobrowolski
Kategorie: Java, Ogólne, Techblog
« No Scope registered for scope 'session'

Reflection API to mocarne narzędzie. Pozwala badać i modyfikować zachowanie obiektów w uruchomionym środowisku. Umożliwia dostęp do prywatnych pól i metod, co jest bardzo często wykorzystywane przez różnej maści frameworki i biblioteki. Czasami kilka linii z wykorzystaniem Reflection API pozwala zastąpić dziesiątki linii kodu i klas napisanych standardowym sposobem. Jego użycie zalecane jest doświadczonym programistom z dobrą znajomością Javy. I czasem może być niebezpieczne.

public class Main {

	private static Integer multiply(Integer a, Integer b) {
		return a * b;
	}

	public static void main(String[] args) throws Exception {

		Field field;
		field = String.class.getDeclaredField("value");
		field.setAccessible(true);
		field.set(" world", " hell".toCharArray());
		field.setAccessible(false);
		field = String.class.getDeclaredField("count");
		field.setAccessible(true);
		field.set(" world", 5);
		field.setAccessible(false);		
					
		field = Integer.class.getDeclaredField("value");
		field.setAccessible(true);
		field.set(Integer.valueOf(0), 10);
		field.setAccessible(false);
		
		System.out.println("Hello " + multiply(0, 0) + " world");
	
	}
}

Kto zgadnie co wyrzuci na konsolę metoda main()?

A teraz wystarczy sobie wyobrazić, że posiada się jakiś serwis u usługodawcy ze współdzieloną maszyną wirtualną, i na dodatek współdzieli się ją z kimś złośliwym.

Komentarze

piotrek, 03 sierpnia 2011 14:50:33

a co z security managerem? strzelam, ze dobrze skonfigurowane uprawnienia nie pozwola na cos takiego na wspoldzielonym serwerze. ale przyznaje, ze nigdy nie zajmowalem sie konfiguracja uprawnien wiec to tylko moje pobozne zyczenia

Zostaw komentarz

Treść:
Podpis:
Strona WWW:
Kod:

Weryfikacja antyspamowa