2014-04-06 10 views
5

Vorrei consentire agli utenti di inviare codice sorgente Java/Scala dal client browser e compilarlo/eseguirlo sul server. Tuttavia, allo stesso tempo, voglio limitare gli utenti a eseguire codice potenzialmente dannoso sul server.Scala/Java Sandbox per codice non attendibile

Ad esempio, vorrei impedire l'accesso al filesystem e l'accesso alla rete in entrata/in uscita per il codice sorgente inviato. Cos'altro dovrei limitare?

Quali librerie Java/Scala devo disabilitare esplicitamente per il client? Per esempio, ecco la mia lista Non consentito API/librerie:

java.lang.System 
java.lang.Runtime 
java.io.* 
java.nio.* 
scala.io.* 
java.net 

Come faccio correttamente sandbox non attendibile il codice Java/Scala?

+0

Potrei sbagliarmi ma, per prima cosa, dovresti implementare una "lista bianca" e le seconde API non consentite non saranno sufficienti. Ma ancora una volta, in questa dimensione non sono sicuro dell'intero scopo. – Lucio

+3

Vorrei usare un * approccio all'ambiente isolato *. Cioè, non limitare il codice oi pacchetti disponibili, ma limitare l'ambiente - cioè no (o limitato/virtualizzato) accesso al file system, no (o accesso alla rete limitato/virtualizzato). Questo non risponde alla domanda in quanto non dice * come * creare un ambiente così limitato, ma credo che sia un approccio sano per un servizio online "codepad/execution". – user2864740

+0

@ user2864740 + proibisce cose come 'System.exit()' –

risposta

3

Il runtime JVM può essere limitato fornendo un policy file. Java purtroppo non è infallibile, quindi sarebbe saggio limitare l'account che esegue la JVM a livello di SO.

Se si consente all'utente finale di compilare codice scala sul proprio server, il compilatore potrebbe eseguire codice macro che è una superficie di attacco aggiuntiva. Probabilmente Scalac non è stato progettato per la protezione da macro dannose. Scalac viene eseguito all'interno di una JVM stessa e potrebbe essere analogamente in modalità sandbox.

This question è molto vicino al tuo.

+0

Hi @Mark Lister, è possibile fornire ulteriori informazioni sulla limitazione dei privilegi JVM a livello di SO? – NehaM

Problemi correlati