ERROR: Insecure dependency in `` while running with -T switch at
我正在从 perl 脚本执行 bash 脚本。
my $date_tmp="31-DEC-2016";
my $new = `/bin/sh ./compareDate.sh "$date_tmp"`;
我将捕获变量中的输出$new
。perl
在污点模式打开时如何完成此操作?
答案1
从佩尔塞克:
...otherwise the only way to bypass the
tainting mechanism is by referencing subpatterns from a regular
expression match. Perl presumes that if you reference a substring
using $1, $2, etc., that you knew what you were doing when you wrote
the pattern.
因此,假设您需要从外部脚本获取数据并对其进行操作,您需要验证所获取的数据。我会冒险建议您compareDate.sh
返回给定日期和今天之间的天数。如同:
$ /bin/sh ./compareDate.sh "$date_tmp"
42
然后可以这样清理:
my $new = `/bin/sh ./compareDate.sh "$date_tmp"`; # TAINTED
if ($new =~ /^(\d+)$/) {
$new = $1; # Not tainted
} else {
die "Unexpected output from compareDate.sh!\n";
}
代码并没有简单地清除变量(尽管我们的检查过于宽松,这是可能的),它验证了它是否具有预期的内容。如果有人弄乱了它,使它包含:
$ /bin/sh ./compareDate.sh "$date_tmp"
42; /bin/rm -rf *;
那么验证就会失败。只有数字才能打通,我们不希望它们给我们带来任何麻烦。显然,更复杂的输出可能需要更多验证。
当我写上面的内容时,我主要查看代码,并且$date_tmp
从代码中分配了一个文字字符串,并且必须是未受污染的。但正如乔丹指出的那样,错误消息告诉我们反引号执行根本没有发生。问题并不是 shell 的输出,而是一些早期的污点阻止了它的运行。
反引号中的唯一变量是$date_tmp
,因此在反引号中的赋值和使用之间需要对其进行类似的验证。