【发布时间】:2010-12-16 14:09:07
【问题描述】:
假设攻击者控制变量$untrusted_user_supplied_path。下面的 Perl 代码可以利用吗?
my $untrusted_user_supplied_path = ...
if ($untrusted_user_supplied_path =~ /\.\./) {
die("Tries to escape homedir.");
}
my $base_path = "/home/username/";
my $full_path = "${base_path}${untrusted_user_supplied_path}";
if (-e $full_path) {
open(FILE, "<", $full_path) || die("File not accessible.");
while (<FILE>) {
# present the content to the user
}
close(FILE);
}
如果攻击者可以选择$untrusted_user_supplied_path 的值以便他/她可以读取驻留在不是$base_path 子目录的目录中的文件(比如/etc/passwd )?
您可以假设代码在 Linux 下运行。此外,您可以假设将文件呈现给用户的代码中没有引入其他缺陷。
请注意,问题是关于代码是否是
可利用,而不是如何使代码更安全。有无数
使代码更安全的方法(想想chroot等)但那是
超出了这个问题的范围。如果你在你的答案中说明
相信代码是否可利用。当然,请
提供支持性论据。
【问题讨论】:
-
这个问题其实和 Perl 没有任何关系,而是和文件系统安全以及如何指定目录路径有关。
-
那么,我认为链接应该是您唯一关心的问题。
-
为什么会被如此多地否决? (目前:-3)
-
我看不出有什么理由不赞成这一点。 +1
-
OP 似乎对回答他问题的人很刻薄。无论是否合适,这几乎总是会让你投反对票。我个人很想将此作为“不是一个真正的问题”来结束,但由于人们正在回答它,我想这是一个真正的问题。
标签: regex linux perl security filesystems