>> Hi!
>>
>>  Thoughts?
>>>
>>
>> This is a fine idea, however actually doing it is not that easy. Note 
>> that knowing which function is "safe" is pretty hard, but that's only a 
>> start.
>> Plugin code, for example, can call functions outside plugin context, 
>> while passing all kinds of arguments - is it safe or not? It depends 
>> on the context - e.g. plugin may need access to the database - 
>> directly or through some API - but that opens the door to various SQL 
>> injections and other mischief, etc. etc.
>> So while the idea is fine, designing a working sandbox is a very 
>> complicated task. That said, if you have any ideas - you're welcome to 
>> propose.
>
>
> The sandbox I'm considering would only impact the ability to directly call
> internal functions. The idea rests on the hope that the framework or CMS
> provides a security model that protects the integrity of their own
> environment. The framework can for example hand off whatever state
> variables are deemed appropriate and necessary to a plugin. The framework
> can make public whatever methods are appropriate and necessary. However,
> the framework can't currently limit the direct calls to internal functions
> (without parsing the PHP source and it's dependencies), which could allow
> the plugin developer to circumvent the security policies of the framework.
>
> Indeed, the complexity is extreme, even for the limited scope of this idea.
> And, avoiding complexity for the developers using the sandboxed version
> would be difficult, too.
>
> I'm wondering if it would be easier to allow constants representing entire
> classes of functionality. For example:
>
> include_restricted('file/path', $whitelist = array('SANDBOX_FILE',
> 'SANDBOX_PDO', 'SANDBOX_MYSQL', 'SANDBOX_SOCKET'));
>
> If an error was raised because an included file required additional access,
> the error message could detail the exact constant(s) that would have to be
> whitelisted for the include to be allowed.
>
> Thank you for the feedback, Stas. The questions and concerns raised in this
> discussion help considerably.
>
> Adam

I've seen a simple "safe" code evaluator put together using token_get_all. I'm 
certain that you could create an include_restricted() function in userland 
using a similar system: walk through the tokens looking for anything forbidden 
(this will be tricky, because there are a lot of nooks that things could hide, 
like superglobals), then if everything looks good include the file. Use a 
caching system of some sort to improve performance and eliminate redundant 
checks.

I seriously doubt that this would ever get implemented in the core though. PHP 
has been moving away from this sort of thing (and for good reason). Attempting 
a "one size fits all" sandbox in the core just doesn't make any sense.

John Crenshaw
Priacta, Inc.

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to