php - AWS上的美元符号密码破解mysqldump
问题描述
我在 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”
看起来调用正在使用非转义字符串,然后由 shell 解析(它也用于$
表示变量)。您必须转义使用escapeshellarg()传递的所有参数以反击:
$c = sprintf(
$command,
escapeshellarg(config('database.connections.host')),
escapeshellarg(config('database.connections.username')),
escapeshellarg(config('database.connections.password')),
escapeshellarg($destinationDatabase)
);
推荐阅读
- email - 如何自动化谷歌表格电子邮件在配额内和每天发送?
- python - /accounts/profile/'User'对象的Django AttributeError在更新配置文件时没有属性'get'
- python - Python 类型:如何在类型提示中引用动态创建的类
- z3 - 是否有可能证明这个定义的函数是 z3 中的对合?
- python - 不和谐机器人编程
- r - 如何使用 stat_density 和时间序列(x 轴上的 Posixct)?
- angular - 从角度 10 的反应形式的输入数组中获取数据
- swift - 如何快速将用户名、密码安全地保存在钥匙串中
- node.js - TypeError:URL 不是构造函数 - react-dev-utils/getPublicUrlOrPath.js
- wordpress - style_loader_tag 过滤器正在转换特殊字符,即使禁用 wptexturize