# Sistema di scripting

**URL:** <https://www.ruby-forum.com/t/sistema-di-scripting/220952>\
**Category:** IT\
**Created:** [June 26, 2012, 9:52am UTC](https://www.ruby-forum.com/t/sistema-di-scripting/220952 "2012-06-26T09:52:03Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![aris](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/258eb7/32.png) [@aris](https://www.ruby-forum.com/u/aris)\
**Post date:** [June 26, 2012, 9:52am UTC](https://www.ruby-forum.com/t/sistema-di-scripting/220952/1 "2012-06-26T09:52:03Z")

</div>

Ciao a tutti,  
in un progetto ruby ho bisogno di gestire un sistema di “scripting” (pi  
o  
meno), magari (e possibilmente) con ruby stesso 😉  
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 😉  
In aggiunta devo tenere di conto anche della possibilit che il codice  
caricato esegua qualcosa tipo: while true do; end

Idee ?

---

<div class="post-metadata">

**Author:** ![gawaine](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/49beb7/32.png) [@gawaine](https://www.ruby-forum.com/u/gawaine)\
**Post date:** [June 26, 2012, 9:57am UTC](https://www.ruby-forum.com/t/sistema-di-scripting/220952/2 "2012-06-26T09:57:54Z")

</div>

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](http://www.ruby-doc.org/docs/ProgrammingRuby/html/taint.html)  
2012/6/26 Nicola R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> In aggiunta devo tenere di conto anche della possibilit che il codice  
> caricato esegua qualcosa tipo: while true do; end
> 
> Idee ?
> 
> –  
> Nicola R. – [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
> 
> * * *
> 
> Ml mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
$ cd /pub  
$ more beer

The blog that fills the gap between appsec and developers:

> **[Armored Code](https://armoredcode.com/)**
>
> Independent research on application security, vulnerability research, secure software engineering, and open-source security tooling by Paolo Perego.

---

<div class="post-metadata">

**Author:** ![gawaine](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/49beb7/32.png) [@gawaine](https://www.ruby-forum.com/u/gawaine)\
**Post date:** [June 26, 2012, 10:20am UTC](https://www.ruby-forum.com/t/sistema-di-scripting/220952/3 "2012-06-26T10:20:06Z")

</div>

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.](https://github.com/Sophrinix/TryRuby) ([www.tryruby.org](http://www.tryruby.org)) che usa racc e  
ruby\_parser.

Il giorno 26 giugno 2012 10:09, Sergio B.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)ha scritto:

---

<div class="post-metadata">

**Author:** ![gawaine](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/49beb7/32.png) [@gawaine](https://www.ruby-forum.com/u/gawaine)\
**Post date:** [June 26, 2012, 10:09am UTC](https://www.ruby-forum.com/t/sistema-di-scripting/220952/4 "2012-06-26T10:09:35Z")

</div>

Il giorno 26 giugno 2012 09:51, Nicola R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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:  
[http://stackoverflow.com/questions/2575435/a-scripting-engine-for-ruby](http://stackoverflow.com/questions/2575435/a-scripting-engine-for-ruby)  
[http://stackoverflow.com/questions/406833/language-in-a-sandbox-in-rails](http://stackoverflow.com/questions/406833/language-in-a-sandbox-in-rails)  
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 · GitHub](https://github.com/cowboyd/therubyracer) potrebbe essere una soluzione 🙂

S.

---

<div class="post-metadata">

**Author:** ![gawaine](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/49beb7/32.png) [@gawaine](https://www.ruby-forum.com/u/gawaine)\
**Post date:** [June 26, 2012, 12:07pm UTC](https://www.ruby-forum.com/t/sistema-di-scripting/220952/5 "2012-06-26T12:07:06Z")

</div>

2012/6/26 Paolo P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> 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

> **[David N. Welton](https://www.welton.it/davidw/)**

[http://www.dedasys.com/](http://www.dedasys.com/)

---

<div class="post-metadata">

**Author:** ![gawaine](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/49beb7/32.png) [@gawaine](https://www.ruby-forum.com/u/gawaine)\
**Post date:** [June 27, 2012, 2:45pm UTC](https://www.ruby-forum.com/t/sistema-di-scripting/220952/6 "2012-06-27T14:45:48Z")

</div>

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
