Entra

View Full Version : [JAVA]ClassLoading e Security Manager


Mixmar
24-04-2007, 10:31
Salve a tutti,

ho una domanda forse banale e forse già trattata più approfonditamente altrove: sono convinto che online si trovi un sacco di materiale, ma vorrei uno spunto per cominciare, quindi vi chiedo consiglio.

Posso, con Java, limitare le possibilità di azione di un codice che ho caricato tramite un class loader (e non ho scritto io)? Vorrei, cioè, impedire l'esecuzione di chiamate tipo "System.exit" et similia...

Scusate se sto domandando una cosa troppo banale. :D

lovaz
24-04-2007, 11:28
Installi un security manager, e non specifichi la runtime permission corrispondente.
La trovi qui, penso sia "exitVM":

http://java.sun.com/j2se/1.4.2/docs/guide/security/permissions.html#RuntimePermission

PGI-Bis
24-04-2007, 16:36
Puoi lanciare l'applicazione da linea di comando con l'opzione:

-Djava.security.manager

Questo fa partire il programma con delle politiche di sicurezza che a malapena permettono l'apertura di una finestra :D.

Mixmar
25-04-2007, 08:32
Puoi lanciare l'applicazione da linea di comando con l'opzione:

-Djava.security.manager

Questo fa partire il programma con delle politiche di sicurezza che a malapena permettono l'apertura di una finestra :D.

Ok, ma se non chiedo troppo... come faccio a imporre le limitazioni di esecuzione solo alle classi che dico io?

Sì, lo so, sono pigro... :D

lovaz
25-04-2007, 10:55
Puoi specificare il codebase delle suddette classi nella grant entry
del file di policy, vedi qui:

http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html

esempio:

grant codebase "http://..."
{
...

Mixmar
25-04-2007, 20:10
Puoi specificare il codebase delle suddette classi nella grant entry
del file di policy, vedi qui:

http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html

esempio:

grant codebase "http://..."
{
...

Dunque, potrei fare così: metto in un apposito jar le classi che devo caricare dinamicamente, in una directory precisa, e poi assegno dei permessi "potenti" (AllPermission, in pratica) alle "mie" classi (che includono quella che fa il class loading, of course) e nessuno o molto pochi permessi al piccolo package incluso.

Il problema è che devo porre dei vincoli anche sull'utilizzo delle MIE classi (dal codice caricato dinamicamente si può ancora richiamare, per esempio, un metodo statico nelle mie classi): immagino che dovrò crearmi delle permission speciali ed utilizzarle.

Come avrete capito, è una specie di plugin: vorrei avere la possibilità di vincolare fortemente l'utilizzo che ne farà lo sviluppatore esterno (per questo pensavo di fargli estendere una classe astratta, con tutto 'private' e con metodi 'final' quando non 'abstract').