Mi piacerebbe poter consentire agli utenti di inviare codice JavaScript arbitrario, che viene quindi inviato a un server Node.JS ed eseguito in modo sicuro prima che l'output venga inviato a più client (come JSON). Mi viene in mente la funzione eval
, ma so che questo ha diversi problemi di sicurezza (il codice inviato dall'utente sarebbe in grado di accedere all'API file del Nodo, ecc.). Ho visto alcuni progetti come Microsoft Web Sandbox e Google Caja che consentono l'esecuzione di markup e script sanificati (per incorporare annunci di terze parti sui siti Web), ma sembra che si tratti di strumenti lato client e non sono sicuro che possano essere usato con sicurezza all'interno del nodo.Sandbox in modo sicuro ed esegui JavaScript inviato dall'utente?
Esiste un modo standard per sandbox ed esegue JavaScript non attendibile nel nodo, ottenendo l'output. È un errore provare e fare questo lato server?
EDIT: Non è importante che l'utente sia in grado di sfruttare tutte le funzionalità di JavaScript, infatti sarebbe preferibile poter selezionare e scegliere quali API sarebbero fornite al codice utente.
MODIFICA: Ho intenzione di andare avanti e aggiornare con quello che ho trovato. Questo modulo Sandcastle (bcoe/sandcastle
) sembra mirare a fare ciò che ho in mente. Non sono sicuro di quanto sia sicuro, ma dal momento che questo non è per niente di troppo importante, penso che lo farò se lo provassi. Aggiungerò la mia risposta se riuscirò a farlo correttamente.
Perché deve essere eseguito sul server, piuttosto che sul client? – delnan
Penso che questo sia un errore, ma potresti provare il nodo "vm" - http: //nodejs.org/api/vm.html – JoshRagem
Questo è per un concetto di gioco di programmazione per divertimento, non posso fidarmi del i client per eseguire il codice. Voglio farlo lato server per questo motivo e perché l'output verrà serializzato e inviato a 1 o più altri client. Sembra che il modulo vm o qualcosa che lo avvolge sia quello che voglio. –