Iscriviti alla newsletter o al feed RSS per ricevere gli aggiornamenti del blog automaticamente!

 Invocare dall’esterno un metodo protetto o privato di una classe java: sicuri che sia impossibile ?



La risposta più corretta è: “dipende dalla presenza o meno di un security manager”.

Infatti attraverso la reflection è effettivamente possibile andare a forzare i vincoli del linguaggio Java senza eccessiva difficoltà, ammenochè appunto non sia presente un security manager, unico attore in grado realmente di gestire ed eventualmente bloccare tali tipologie di forzature.

Ma veniamo subito all’esempio pratico che vale più di molte disquisizioni. Data la seguente classe:


package net.nothing2hide.test;

public class ClassWithMethodsToHack {

  private void sayHello(String name){
      System.out.println("Hello " + name +
          "! You're calling a private method");
  }
}

vogliamo dimostrare come sia facilmente invocabile dall’esterno il metodo privato “sayHello“; come già vi ho anticipato per farlo utilizzeremo pesantemente la reflection:


package net.nothing2hide.test;

public class PrivateMethodInvocationTest {

  /**
  * This sample class demonstrates how to
  * invoke a protected method on another class 
  * 
  * @param args
  */
  public static void main(String[] args) {
    String myName = "Davide";
    Method m;
    try {
      //Let'access the private method
      //by reflection. You could do the same
      //with a protected method
      m = ClassWithMethodsToHack.class.getDeclaredMethod(
      "sayHello", new Class[]{String.class});
      if (m != null) {
        //Let's force the java language access 
        //checks on the reflected method. Note 
        //that if a security manager is defined
        //this workaround could not be permitted 
        //and a SecurityException could be raised
        m.setAccessible(true);
        
        //And finally let's invoke the protected method 
        m.invoke(new ClassWithMethodsToHack(), 
        new Object[]{myName});
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}



Ti è piaciuto l'articolo? Iscriviti ora per ricevere aggiornamenti o articoli simili:
Iscriviti al feed RSS scriviti al feed RSS


Ancora nessun commento »

Feed RSS dei commenti di questo post. TrackBack URI

Lascia un commento

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Nothing2Hide © 2006 All rights reserved.

License | Disclaimer

Chiudi
Invia e-mail