abbiamo un'applicazione Java e desidera eseguire codice non attendibile utilizzando la funzione integrata in Javascript interprete (javax.script. *)Come bloccare (o sandbox) built-in JavaScript interprete per eseguire gli script non attendibili del JDK
Tuttavia, per impostazione predefinita, l'interprete consente l'accesso a qualsiasi classe java. Ad esempio "java.lang.System.exit(0)
" nello script interromperà la JVM. Credo che questo si chiami "Live Connect", vedi Sun "Java Scripting Programmer's Guide" per maggiori dettagli.
vorrei trasformare in qualche modo fuori la possibilità per lo script per accedere alle classi Java, vale a dire voglio solo lo script per essere in grado di accedere agli oggetti che ho specificamente iniettare nel usando i eval()
o put()
metodi su ScriptEngine
.
ho trovato un po 'di documentazione su come raggiungere questo obiettivo con più vecchia versione autonoma dell'interprete (Rhino), ad esempio, vedere http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/
Tuttavia questo approccio non è possibile in JDK 1.6 senza utilizzare classi interne del sole, come il ClassShutter ecc. È tutto configurato internamente e non può essere sovrascritto con metodi pubblici.
Spero che ci sia un modo semplice per aggirare questo che non richiede il salto attraverso cerchi complessi utilizzando un SecurityManager personalizzato, ClassLoader, ecc. Ma non è stato possibile trovare nulla.
Ci si aspetterebbe che con la frequenza dei bollettini sulla sicurezza che circondano Javascript in diverse applicazioni, ci sarebbe un semplice flag per disabilitare Live Connect!
Vedi anche: http://stackoverflow.com/questions/1347099/how-do-i-secure-scripts -run-using-javax-scripting – McDowell
Ancora non riesco a credere nel 2014 non esiste un modo semplice per disattivare Live Connect per Java ScriptEngine. Ho cercato e cercato senza fortuna per trovare un modo semplice per limitare l'accesso.Sto distribuendo un'applicazione lato server che dovrebbe essere in grado di analizzare il JavaScript fornito dal client usando JSR 223 e senza poter disabilitare cose come "' java.awt.Desktop.getDesktop() '" o "' java.lang.System.exit (0) '" è quasi impossibile da implementare. – chrixm