【发布时间】:2019-02-07 11:44:32
【问题描述】:
我正在使用文件内容作为参数的 bash 脚本中运行命令。这里是一个简化的例子:
USER=$(<$fileA)
PASSWORD=$(<$fileB)
wget -u $USER -p $PASSWORD
但是,用户可以将文件的内容设置为任何值。我认为我需要逃避这一点,但我不知道该怎么做,尤其是在 $PASSWORD 不会被改变的情况下。否则密码显然不起作用。
谢谢
【问题讨论】:
-
你不应该使用变量名
USER——它是由shell预先填充的当前用户的用户名,并且改变它可能会混淆任何期望它具有该值的东西。有一堆全大写的变量具有特殊的含义,所以最好为变量使用小写或混合大小写的名称,以避免可能的冲突。 -
如果您执行该行,则用户名和密码会暴露给碰巧登录到您计算机的任何人(通过 /proc/
/cmdline , for example, or with even less work through theps` 命令)。使用 curl,您可以创建不那么不安全的命令行:echo user|cat "$fileA" "$fileB"|paste -sd:|curl -K- http://www.example.com。
标签: bash variables command-line escaping