Quali sono le mie scelte per lo scripting sandbox lato server? [chiuso]


11

Sto costruendo un sito Web pubblico in cui gli utenti condividono dati e script per l'esecuzione su alcuni dati. Gli script vengono eseguiti sul lato server in una sorta di sandbox senza altre interazioni in questo ciclo: il mio programma Perl legge da un database uno script creato dall'utente, aggiunge i dati da elaborare nello script (ovvero: un documento JSON) quindi chiama l'interprete, esso restituisce la risposta (un documento JSON o testo semplice), lo salvo nel database con il mio script perl. Lo script dovrebbe essere in grado di avere un po 'di accesso alle funzioni integrate aggiunte al linguaggio di script da solo, ma niente di più.

Quindi mi sono imbattuto in node.js come interprete javascript, e circa un'ora fa con il V8 di Google (v8 ha senso per questo tipo di cose?). Anche CoffeeScript mi ​​è venuto in mente, dato che sembra bello ed è ancora Javascript.

Penso che JavaScript sia abbastanza diffuso e più "sandboxable" dal momento che non ha chiamate del sistema operativo o qualcosa di remoto insicuro (penso).

a proposito, sto scrivendo il sistema su Perl e Php per il front-end.

Per migliorare la domanda: sto scegliendo Javascript perché penso che sia abbastanza sicuro e abbastanza semplice da implementare con node.js, ma quali altre alternative sono per raggiungere questo tipo di attività? Lua? Pitone? Non riesco proprio a trovare informazioni su come eseguire correttamente un interprete sandbox.


Non è chiaro cosa stai chiedendo. È possibile? Certo, è possibile.
Robert Harvey,

Risposte:


3

Java contiene un interprete JavaScript incorporato. Non è sandbox predefinito, ma questo può essere abilitato da:

  • impostazione dell'otturatore di classe corretto - JavaScript può normalmente caricare classi Java. L'otturatore di classe è un tipo di gestore della sicurezza che decide quali classi possono essere caricate e quali no.
  • script "startup" - breve inizializzazione JavaScript che elimina i punti di accesso al sistema esterno: java = undefined;Packages = undefined;org = undefined;

In tal caso, gli script in esecuzione all'interno non dovrebbero poter accedere in alcun modo all'ambiente esterno.

Fornisce inoltre il timeout dello script e la funzionalità di limitazione del conteggio delle istruzioni, utile per il sandboxing: è possibile limitare la durata o la complessità dello script.

L'ho usato in Java 7 che ha il motore JavaScript di Rhino. Java 8 ha un motore Nashorn più recente e moderno: non l'ho provato con Nashorn ma mi aspetto che dovrebbe essere simile.


Puoi inserire nella whitelist anziché nella blacklist?
Petah,

@Petah, puoi prima disabilitare (lista nera) tutto e quindi inserire alcune funzionalità specifiche sotto forma di oggetto nella sandbox. Questa è quindi essenzialmente la whitelist, quindi sì, puoi farlo.
qbd,

La conoscenza di JavaScript è abbastanza diffusa da renderla una buona scelta come linguaggio di scripting. È possibile che si desideri definire alcuni globali e chiamate per gli utenti poiché si sta limitando l'accesso alle chiamate. Pensa a come il browser definisce le windowvariabili per JavaScript per consentire l'interazione.
Michael Shopsin

2

il mio primo pensiero è stato node.js - come detto sopra è un interprete javascript. Ed è esattamente ciò di cui hai bisogno, se vuoi eseguire il sandbox degli script in un modo davvero sicuro.

Un altro modo potrebbe essere quello di controllare ogni comando in uno script, se è valido o meno. Ma non credo che otterrai una sandbox sicura.

Saluti


Esiste un supporto per sandboxing su NodeJS o disponibile con NodeJS?
ysdx,

4
Trovato questo: gf3.github.com/sandbox
ysdx

+1 per l'ottimo link al "NIFTY JAVASCRIPT SANDBOX FOR NODE.JS".
Jack Stone,

Nota: il sandbox gf3 può essere eliminato.
Petah,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.