2010-06-07 18 views
6

Voglio che gli sviluppatori scrivano alcune app personalizzate per un sito in Javascript, ma voglio sandbox in modo che non possano fare nulla di cattivo come reindirizzare l'utente, impostare la visualizzazione del corpo su none ecc ecc. Ho un namespace in Javascript, dove vi possono servire esistono tutte le funzioni in là quindi stavo pensando di creare una sandbox sarebbe una questione di:JavaScript Sandbox

with(Namespace) { 
    //App code goes here where they can only access Namespace.* 
} 

Come è facile è per aggirare il problema e quali altri metodi possono essere fatto? Preferirei non dover moderare ogni app inviata.

risposta

1

Per imporre una sandbox, è necessario ispezionare il codice prima che venga eseguito, acquisire qualsiasi codice non valido e, se trovato, in qualche modo impedirne l'esecuzione. Molto noioso e incline agli errori per molto tempo.

Facebook ha fatto questo almeno nella loro prima piattaforma, io, come sviluppatore, sicuramente non mi è piaciuto. Limitano i metodi nativi che potrebbero essere utilizzati e forniscono involucri limitati attorno ad alcuni.

+0

In effetti, è * impossibile * scrivere un tale ispettore di codice, perché può ridursi a risolvere il problema dell'arresto;) (pensa di costruire' s' in qualche modo strano e chiamando 'window [s]()') – mik01aj

2

La prima cosa che viene in mente è eval. Possono usarlo per eseguire codice personalizzato al di fuori della sandbox del wrapper. Sarà molto difficile fermare uno sviluppatore determinato tentando di avvolgere il codice.

Link all'utilizzo di eval.

+1

Google Caja e ADSafe possono limitare 'eval' :-) – CMS

8

Beh, le opzioni per il codice sandbox al momento sono:

Entrambi consentono di creare un ambiente sicuro dove l'accesso all'oggetto globale e il DOM è limitato.

Lo scopo principale di questi progetti è consentire l'inserimento sicuro di widget e contenuti Web da terze parti.

+0

Evita anche che modifichino 'Object.prototype'? – mik01aj

Problemi correlati