【问题标题】:AWS CLI command works on Bash, but not with PHP shell_exec()AWS CLI 命令适用于 Bash,但不适用于 PHP shell_exec()
【发布时间】:2018-06-19 12:01:16
【问题描述】:

我想触发以下命令:

aws route53 change-resource-record-sets --hosted-zone-id XXX
 --change-batch '{ "Comment": "2018-06-19-11:31", "Changes":
[ { "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com",
"Type": "TXT", "TTL": 60, "ResourceRecords":
[ { "Value": "\"something\"" } ] } } ] }'

当我在 bash 上触发它时它会起作用,但当我在 PHP 中运行它时不起作用:

$json = trim(shell_exec($cmd_aws_submit));
// or:
$json = trim(shell_exec("{$cmd_aws_submit}"));

AWS 希望引用 TXT 记录的值 ("\"something\"")。我试着这样引用它:

$value = "\\\"" . $textvalue . "\\\"";
$value = "\"" . $textvalue . "\"";
$value = "\\'" . $textvalue . "\\'";
$value = "'" . $textvalue . "'";

这些都不起作用,我总是收到以下错误:

解析参数“--change-batch”时出错:JSON 无效: 无效 \escape:第 12 行第 23 列(字符 246)收到 JSON: {“评论”:“2018-06-19-11:54”,“更改”:[{“行动”: "CREATE", "ResourceRecordSet": { "Name": "example.com", “类型”:“TXT”,“TTL”:60,“资源记录”: [ { "值": "\"某事\"" } ] } } ] }

使用其他aws UNQUOTED dns 记录值,PHP shell_exec() 可以完美运行。

如果我在 Bash 上触发它,它可以完美地使用 "\"something\"" - 为什么它不能使用 PHP shell_exec()

【问题讨论】:

  • 如何构建$cmd_aws_submit 值?有一个转义参数的函数称为escapeshellarg。您应该使用它而不是自己制作东西。

标签: php aws-cli shell-exec


【解决方案1】:

您应该使用本机 escapeshellarg 方法来转义传递给命令行的参数。如果您决定在某个阶段在 JSON 字符串中包含潜在的不安全数据,这也将保护您免受参数注入攻击。

$json = '{ "Comment": "2018-06-19-11:31", "Changes":
[ { "Action": "CREATE", "ResourceRecordSet": { "Name": "example.com",
"Type": "TXT", "TTL": 60, "ResourceRecords":
[ { "Value": "\"something\"" } ] } } ] }';

$command = "aws route53 change-resource-record-sets --hosted-zone-id XXX
 --change-batch " . escapeshellarg($json);

$result = trim(shell_exec($command));

您也可以选择将 JSON 字符串构建为数组,然后使用 json_encode() 为您构建字符串。

【讨论】:

  • 它不起作用,更糟糕的是:usage: aws [options] [ ...] [parameters] To see help text, you can run: aws help aws help aws help Unknown options: 2018-06-19-11:31,, Changes:, [, {, Action:, CREATE,, ResourceRecordSet:, {, Name:, example.com,, Type:, TXT,, TTL:, 60,, ResourceRecords:, [, {, Value:, "something", }, ], }, }, ], }, Comment:
  • 对不起,去掉变量两边的单引号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 2018-03-31
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
相关资源
最近更新 更多