Re: [PECL-DEV] safe_shell_exec extension for consideration
[email protected] (Stig Bakken) Wed, 26 May 2010 00:20:54 +0200
| Newsgroups | php.pecl.dev |
|---|---|
| Message-ID | <[email protected]> |
Hi Dave, In general, I think calling functions or settings "safe"-anything gives users false fuzzies, and should be avoided. Wouldn't it make more sense to simply extend the existing shell_exec() function in PHP's standard extension to also accept an array parameter? - Stig On Wed, May 26, 2010 at 12:02 AM, Dave McMurtrie <[email protected]>wrote: > Dave McMurtrie wrote: > >> Hi, >> >> We're working to deploy an application using PHP and we'd ultimately like >> to be able to fork/exec a child process without ever involving a shell for >> the purpose of limiting our exposure to potential shell vulnerabilities. >> >> I noticed that shell_exec(), popen() and proc_open() all involve a shell, >> so I wrote a quick extension that will do essentially what shell_exec() and >> popen() do, but doesn't involve ever forking/execing a shell. >> >> I don't know if others might find this useful or not, so I'm sending this >> note for consideration to have it added as an extension. If there's a >> better way to do what we're interested in, please let me know. If any code >> changes are required to allow this to be contributed, please let me know. >> If this is something you're simply not interested it, also let me know. >> >> At the very least, I suspect my tokenizer would require some additional >> functionality, though it does what we currently need. >> >> You can download a tar/gz copy of the extension at: >> >> http://www.andrew.cmu.edu/user/dave64/safe_shell_exec.tar.gz >> > > Replying to myself... I put a copy of my latest code up here. After a lot > of time spent thinking about this, I updated my code to no longer accept a > command string, but to instead accept an array. This is more in line with > what perl does for system() and exec(), and more closely matches what the > exec() system call is expecting to have passed to it. > > My initial effort was intended to be a drop-in replacement for any code > that was already using PHP's shell_exec(), so I made it simply accept a > command string which I was tokenizing to create an argument vector that > could be passed to the exec syscall. I started to "improve" my tokenizing > routine to make it deal with escaped double quotes, then I began to consider > what other things it needed to handle so it would be as compatible as > possible as a drop-in shell_exec() replacement. This led me to realize I > was sliding down a path toward trying to implement my own shell parser which > would likely end up introducing many of the same vulnerabilities I'd like to > steer clear of by not adding a shell to the mix when I need to run an > external program from a PHP script. > > To avoid that mess, I have now updated my code to only accept an array as > described above. > > How might I pursue getting this added to the core of PHP? This seems like > very basic functionality that others might be interested in, as well. > > Thanks, > > > Dave > > -- > PECL development discussion Mailing List (http://pecl.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > >