Extending PHP with sandbox capability ?
| From: | ing . Martin Prášek | Date: | Sat, 20 Dec 2003 12:12:03 +0000 |
| Subject: | Extending PHP with sandbox capability ? | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-6648@lists.php.net to get a copy of this message | ||
Sandbox ?
I have been forced to create PHP application that need inside execution of code snipplets from
untrusted users and do it as secure as possible. I see it is not possible for some security raesons.
(db connection,resources etc.). So I suggest to add a simple sandbox capability to PHP language,
that help avoid security risk in situations where executing of 3rd party code inside of some
application is needed.
I suggest, that code, what will be run inside a sandbox will have no way to acces resources (open
files, db connection etc) from outside of the sandbox,will have a limited (ie strictly defined)
acces to current global and local scope variablers and may be other security checks too.
I suggest to have following things:
Create_sandbox($path,$global_read,$global_write,$scope_read,$scope_write,$resource_available)
function that define sandbox and set its parameters.Parameters of the sandbox describes what from
outside sandbox will be available inside.
$path = from where in filesystem code inside a sandbox can read/write/include other files
$global_read = list of global variables, that are readable inside a sandbox
$global_write = list of global variables, that are writable inside a sandbox
$scope_read = like $global_read,but for current scope
$scope_write = ......
$resource_available = list of openned resources, that are available inside a sandbox.
return $sandbox_id or false if fail.
sandbox_eval($sandbox_id,$code)
like eval, but inside a sandbox.
sandbox_include($sandbox_id,$path)
like include, but inside sandbox.
sandbox_close($sandbox_id)
close and destroy sandbox.
It hing it should work like this
<?
.
.
// do something
.
.
// define sandbox here
$sandbox_id=
Create_sandbox($path,$global_read,$global_write,$scope_read,$scope_write,$resource_available)
.
.
.
// do something
.
.
//here I need to use previously defined sandbox
sandbox_eval($sandbox_id,$code)
.
.
// do something
.
.
.
//here I need to execute other code inside of the same sandbox
sandbox_include($sandbox_id,$path)
.
.
.
//do something
.
.
//end of script, so sandbox is closed
sandbox_close($sandbox_id)
?>
I thing that suggested things adds a simple to use, but yet secure and flexibile capabilities for
executing "not so trusted" third party code inside any PHP aplication .It may add several
bennefits for gerneral PHP security too.What do you think ?
PS: Execuse my bad language, English is not my native.