2013-05-17 2 views
5

Mi chiedevo se un web worker sarebbe un modo sicuro per codificare il codice javascript non sicuro della sandbox. Diciamo per esempio nel contesto di un'applicazione di disegno in cui gli sviluppatori possono implementare nuovi strumenti di disegno, è possibile inserire il codice all'interno di un webworker e ogni volta che l'utente fa clic sulla tela, invia loro un messaggio JSON contenente la posizione del cursore e un matrice di dati di immagine e, quando lo script è fatto, passa un messaggio di nuovo contenente i nuovi dati di immagine.I web worker sono un modo sicuro per sandbox codice javascript non affidabile

Questo sarebbe sicuro, o ci sono dei rischi a cui non sto pensando?

+0

Dai un'occhiata a [Rendere i WebWorkers un ambiente sicuro] (http://stackoverflow.com/q/10653809/1048572) – Bergi

risposta

2

Il problema è che gli sviluppatori si aspettano l'accesso DOM. I Web Worker non sono autorizzati a gestire DOM, a meno che l'intero codice non sia solo per i dati.

Suggerisco di sandbox l'intera app dal dominio principale, in modo simile a come JSFiddle esegue tutto negli iframe. In questo modo, tutto il codice potenzialmente pericoloso può funzionare solo in quel frame mentre tutte le altre cose, come gli accessi, vengono gestite fuori dal frame, nel dominio principale, lontano dal codice potenzialmente pericoloso.

Meglio di tutto, è sufficiente includere il codice di sicurezza. Rivedi il codice prima di unirlo alla tua app principale.

5

DOM non è disponibile per gli addetti al Web, ma è possibile accedere a materiale con la stessa origine, ad esempio indexedDB. Vedere la mia domanda relativa a questo:

Can workers be secure enough for an untrusted code

Il modo più sicuro è quello di utilizzare sandbox attributo del iframe:

http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/

anche dare un'occhiata alla mia biblioteca che semplifica il processo e fornisce la comoda connessione con la sandbox (esportazione funzione invece di messaggistica):

https://github.com/asvd/jailed