【问题标题】:Dollar sign in password breaking mysqldump on AWSAWS上的美元符号密码破解mysqldump
【发布时间】:2019-10-01 15:06:32
【问题描述】:

我在 Elastic Beanstalk 上托管一个 Laravel 应用程序。我有一个运行 mysqldump 的工匠命令:

$command = 'mysqldump -h%s -u%s -p%s %s > ' . storage_path($filename);
$c = sprintf(
            $command,
            config('database.connections.host'),
            config('database.connections.username'),
            config('database.connections.password'),
            $destinationDatabase
        );
$this->process = new Process($c);

当密码(我存储在环境变量中)没有美元符号时,此方法有效。但是当密码中确实有美元符号时,它会被切断,然后命令就会失败。例如。如果密码是“test$me”,我得到这个错误:

“mysqldump -hhostname.eu-central-1.rds.amazonaws.com -urandomname -ptest db_name > db.sql”命令失败

即它不是插入“test$me”作为密码,而是插入“test”。

我尝试在环境变量中的密码周围添加单引号,同样的事情发生了:

“mysqldump -hhostname.eu-central-1.rds.amazonaws.com -urandomname -p'test' db_name > db.sql”命令失败

【问题讨论】:

  • 在 $ 之前添加转义反斜杠会有所不同吗?喜欢这个'test\$me'吗?
  • 你能显示你的配置文件吗?
  • 创建一个只有 php 文件可以加载的 my.cnf 文件并改用它可能会更好。
  • 但是根据superuser.com/questions/123928/…,你应该可以在命令行中使用单引号,只要配置文件中也有单引号中的密码

标签: php laravel amazon-web-services amazon-elastic-beanstalk


【解决方案1】:

美元签到。但是当密码中确实有美元符号时,它会被切断,然后命令就会失败。例如。如果密码是“test$me”

看起来调用使用的是非转义字符串,然后由 shell 解析(它也使用$ 表示变量)。您必须转义使用 escapeshellarg() 传递的所有参数以反击:

$c = sprintf(
            $command,
            escapeshellarg(config('database.connections.host')),
            escapeshellarg(config('database.connections.username')),
            escapeshellarg(config('database.connections.password')),
            escapeshellarg($destinationDatabase)
        );

【讨论】:

  • @AlaaMorad:不,那会产生不同的输出。
  • 它产生以下输出:命令“mysqldump -hhostname.eu-central-1.rds.amazonaws.com -urandomname -p'test' db_name > db.sql”失败
  • 这表明问题也与您的配置文件有关。你把密码放在哪里了?多腾夫?还是config.php?
  • 在 Elastic Beanstalk 环境变量中
  • 究竟是什么意思?你能编辑你的问题并显示你设置密码的配置吗(记得使用假数据)
【解决方案2】:

我在我的 Elastic Beanstalk 环境变量中遵循 this answer 并在 $ 前添加了三个反斜杠:

test\\\$me

【讨论】:

    猜你喜欢
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2017-10-05
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多