不带引号的bash参数/变量的风险

时间:2013-05-17 16:39:25

标签: linux bash security sudo

我最近读到在bash脚本中使用不带引号的参数是危险的。我知道在SQL查询中,转义是至关重要的,但我没有看到以下代码的任何问题(明显的目录遍历除外)

#!/bin/bash

MYDIR="/tmp/$1"

if [ -d $MYDIR ] ; then
    /bin/rmdir $MYDIR
fi

分配行中的引号是否足够?

似乎唯一可能的是“if”行说

# ./mm.sh "arg1 arg2"
./mm.sh: line 5: [: /tmp: binary operator expected

但这对我来说似乎并不危险。我错过了什么吗?

修改:更具体一点。当我使用sudo mm.sh运行时,有什么办法可以提升我的权限吗?

此致

的Lukas

2 个答案:

答案 0 :(得分:1)

rmdir拒绝删除非空目录,因此您的脚本不太可能有任何真正的灾难性后果。你仍然可以尝试弄清楚当你打电话时会发生什么

./mm.sh ' -o -n /home/lukas/xyz'

答案 1 :(得分:1)

好的,如果你有一个带有空格的目录/tmp/foo bar怎么办?

如果你以这种方式传递参数,而不引用:./mm.sh foo bar

您的脚本会检查/tmp/foo,如果您确实有/tmp/foo,则会将其删除,这不是您想要的。

危险并不总是意味着会意外删除某些内容。如果您不引用,您的脚本将错误地解析并使用您的参数。它可能会停止运行,就像您的示例一样,它可能会运行,但不正确。考虑一下您的脚本是否生成重要报告,但报告不正确。这不危险吗?