Sistema di scripting

Ciao a tutti,
in un progetto ruby ho bisogno di gestire un sistema di “scripting” (pi
o
meno), magari (e possibilmente) con ruby stesso :wink:
Il ruby esterno, quando viene valutato, deve poter definire classi e
metodi
che poi verranno istanziati e lanciati dal codice ruby principale.

Il mio problema sulla sicurezza. Usando eval + $SAFE mi ritrovo nella
situazione in cui con $SAFE=3 il codice viene valutato ma pu ancora
eseguire operazioni scomode come un “exit”. Usando $SAFE=4 non posso pi
fare neanche l’eval del codice :wink:
In aggiunta devo tenere di conto anche della possibilit che il codice
caricato esegua qualcosa tipo: while true do; end

Idee ?

Eh Nicola… questo un bel dilemma… dovresti cacciare quel
processo in una sorta di sandbox.
Per da quello che leggo qui[1], potresti aprire un Thread a parte,
impostare SAFE a 4 e fare il load() del codice che, come giustamente
dici tu, da considerarsi malicious per definizione in questo caso.

Ciao ciao
thesp0nge

[1]Programming Ruby: The Pragmatic Programmer's Guide
2012/6/26 Nicola R. [email protected]:

In aggiunta devo tenere di conto anche della possibilit che il codice
caricato esegua qualcosa tipo: while true do; end

Idee ?


Nicola R. – [email protected]


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


$ cd /pub
$ more beer

The blog that fills the gap between appsec and developers:

Grazie mille per i link. Mi stato suggerito anche
GitHub - Sophrinix/TryRuby: Try Ruby is a interactive shell that quickly and whimsically teaches the Ruby programming language. Originally _why's idea, it has been recreated from the ground up by Rubyists who have a passion for Ruby and for teaching their fellow (wo)man how to program. (www.tryruby.org) che usa racc e
ruby_parser.

Il giorno 26 giugno 2012 10:09, Sergio B.
[email protected]ha scritto:

Il giorno 26 giugno 2012 09:51, Nicola R. [email protected] ha
scritto:

In aggiunta devo tenere di conto anche della possibilit che il codice
caricato esegua qualcosa tipo: while true do; end

Idee ?

Vedi se questi link:

possono essere utili.

Cmq come dicono in quei 3d su stackoverflow “JavaScript has been running
as
a sandbox language for a long time”
GitHub - rubyjs/therubyracer: Embed the V8 Javascript Interpreter into Ruby potrebbe essere una soluzione :slight_smile:

S.

2012/6/26 Paolo P. [email protected]:

Eh Nicola… questo un bel dilemma… dovresti cacciare quel
processo in una sorta di sandbox.

Probabilmente in questo caso non sarebbe una buona soluzione,
mescolando linguaggi, ma Tcl ha un ottimo sistema di sandbox.


David N. Welton

http://www.welton.it/davidw/

http://www.dedasys.com/

Se usi javascript come sandbox potresti usare opal. Una gemma che
compila codice ruby in js, ed eseguirlo con execjs.

L’unico limite e che non supporta l’eval attualmente