Hi Chris,

Thanks for your helpful input. Some follow-up from me:

csnyder wrote:
 Allen Shaw wrote:
> Can anyone here comment on the wisdom of relying on
> escapeshellcmd() in a situation like this? ...

 First, escapeshellarg() is more specific, and therefore *possibly*
 safer. Rather than escaping the whole thing, just escape the user
 input.

In my case, I'm passing multiple arguments, but I'm now regexing them apart into separate arguments, so escapeshellarg() does work. For forward compat with the wrapped shell script, I'm hoping to avoid checking for valid arguments and instead just escaping each argument and letting the shell script do its own checking.

 Second, it would be MUCH safer to determine an acceptable range of
 possibilities for the user input... In your case you want to pass
 arbitrary strings, so validation becomes more difficult. You could
 still validate the input so that it only contains printable ascii and
 simple punctuation, no unprintable characters or newlines or any of
 that.
Okay, good thought. For this I'll remove the first 32 non-printing ASCII chars, and DEL:
<?
$user_input = preg_replace('/[\000-\037\127]/', '', $user_input);
?>

If I'm thinking straight, the above will strip most obviously useless chars but still allow lots of chars (e.g. i18n stuff) that I'll never be able to whitelist.

Thanks again for your input.

- Allen
--
Allen Shaw, UPF Data Services
[email protected] | 914.826.4622 | http://www.upf.org

--
Allen Shaw
slidePresenter (http://slides.sourceforge.net)


_______________________________________________
New York PHP User Group Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk

http://www.nyphp.org/show_participation.php

Reply via email to