2012-08-27 16 views
5

Sto implementando un'architettura di plugin per un progetto Rails. L'architettura del plugin include la possibilità per i produttori di plug-in di scrivere il codice Ruby da eseguire sul server. Voglio renderlo sicuro in modo che gli autori di plugin non abbiano la possibilità di scrivere codice distruttivo.Esegui codice rubino in un ambiente limitato

Penso che quello che devo fare, sebbene sia aperto ad altre opzioni, è eseguire il codice Ruby per il plugin in un ambiente isolato che ha un ambito limitato. Sto pensando a qualcosa nello spirito della gemma ma voglio eseguire in sicurezza Ruby anziché JavaScript.

Non riesco a trovare un buon modo per farlo. Ho pensato di utilizzare eval con un oggetto bindings limitato, ma penso che sarebbe difficile a eval diversi file e non penso di poter limitare adeguatamente i binding. Ad esempio, non voglio che un plugin sia in grado di fare qualcosa come un destroy_all su un modello, o un codice esistente di patch scimmia nell'app.

Sono abbastanza perplesso con questo. Qualcuno ha qualche idea?

+0

si potrebbe avere qualche fortuna con questa domanda: http://stackoverflow.com/questions/406833/language-in-a-sandbox- in-rails – Earlz

risposta