takuya/php-shell

更安全的 shell_exec

1.0.1 2020-04-16 13:57 UTC

This package is auto-updated.

Last update: 2024-09-17 00:53:14 UTC


README

$name = "takuya";
$ret = PHPShell::exec_command('echo $name', ['name'=>$name]);

显然,在 'echo $name' 中的 $name 看起来像 PHP 变量,但 $name 实际上是作为传递的 shell 环境变量。

与 escapeshellarg 比较

Quart 对调试不友好。

$name = "takuy'a;curl -h ";
$name = escapeshellarg($name); // -> "'takuy'\''a;curl -h '" 

长字符串参数会使代码更难以阅读..

$url =  escapeshellarg("too long argument ..afasdfasdfasdfasdfawefadf");
$json = escapeshellarg(json_encode($object))
$cmd = 'curl -v -L $url -X POST --data $json';
var_dump($cmd);

使用环境变量更为简单。并且使代码更清晰,了解我们将要做什么。

$env_vars =  ['url'=>$url, 'json'=>$json];
foreach( $env_vars as $k=>$v ){
  putenv("$k=$v");
}
$ret = shell_exec('curl -v -L $url -X POST --data $json');

因此,这个库支持您以环境变量而不是原始字符串的形式传递参数。

功能

更安全地调用 Shell 命令。为了避免转义 Shell 参数,这个库使用 ENV。通过使用环境变量而不是转义,shell 命令调用变得更安全、更简单,可以避免 shell 命令注入。

  • 首次发布于 2008 年。