From: eastcoastcoder@... Date: 2006-02-09T02:43:22+09:00 Subject: Sandboxing eval'd code I'm working on a web app with complicated and ever changing business rules. On any given day, a new rule may need to be introduced - quickly. There's not enough commonality between them to factor out and just make configuration changes. So the developers are always adding and modifying, which of course makes reliability and testing difficult. I thought of the following solution: New business rules can be coded in Ruby and serialized into the database, along with configuration options as to when they apply. (The rules look at a bunch of things and return either continue or abort - so making hooks for them is easy. They should never modify *anything* - just return a value.) The app will load them and run them in a sandbox, catching all exceptions and also timeing them out if they fail to return. Developers can add/modify these rules easily, without touching the core app, and, should one have a bug, although it may give the wrong result, it won't bring the rest of the system down. One concern I have is that I know that eval'd code can modify class definitions, and access other objects via ObjectSpace. Is there anyway to eval code so that it can't change Classes and the like? A true Sandbox. I'm not familiar enough with $SAFE to know what it can do (although I've heard it is not reliable). http://tryruby.hobix.com/ probably does this, but source doesn't seem available. http://approximity.com/cgi-bin/rubybuch_wiki/wpage.rb?nd=214 looks relevant, but I can't figure it out. In general, comments about this greatly appreciated.