gpt4 book ai didi

linux - 文件路径名称存在问题,可能存在损坏的字符

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:06 24 4
gpt4 key购买 nike

Linux 上的 Perl 和 html、CGI。文件路径名问题,在表单字段中传递到服务器上的 CGI。问题出在 Linux 文件路径上,而不是 PC 端。

我正在使用 2 个程序,1)多年前编写的程序,在perl程序中生成动态html,并以表单的形式呈现给用户。我通过插入所需的代码进行修改,以允许用户从他们的 PC 中选择一个文件,并将其放置在 Linux 计算机上。

因为这个程序已经知道 Linux 端所需的文件路径,所以我在隐藏的表单字段中将此文件路径传递给程序 2。

2) Linux 端的 CGI 程序,在 (1) 上的表单发布时运行。

奇怪的问题。我传递的文件路径有一个非常奇怪的问题。我可以使用

提取它
my $filepath = $query->param("serverfpath");

上面确实用看起来完全正确的路径填充了 $filepath。
但它失败了,并且不是以某种方式将我带到文件打开错误 block ,而是导致对 CGI 脚本的调用出现错误。

但是,如果我通过硬编码使用完全相同的字符串填充 $filepath,它就会起作用,并且我的文件会成功上传。

例如:

$fpath1 = $query->param("serverfpath");
$fpath2 = "/opt/webhost/ims/DOCURVC/data"

$fpath1 和 $fpath2 的比较表明它们完全相等。$fpath1 和 $fpath2 的长度检查表明它们的长度完全相同。

我尝试了很多方法来清理$fpath1中的数据。我嚼它。我删除了所有非标准字符。

$fpath1  =~ s/[^A-Za-z0-9\-\.\/]//g;

还有这个:

my $safe_filepath_characters = "a-zA-Z0-9_.-/";
$fpath1 =~ s/[^$safe_filepath_characters]//g;

但无论我做什么,使用 $fpath1 都会导致错误,而使用 $fpath2 则有效。

$fpath1 中的数据可能有什么问题,这会导致它成功与 $fpath2 进行比较,但不相等,视觉上看起来完全相等,显示为具有完全相同的长度,但工作方式不同?

对于下面的文件打开 block 。

$upload_dir = $fpath1 

导致CGI加载完全失败,就好像找不到CGI一样(我知道有时是由CGI脚本中的语法错误引起的)。

$uplaod_dir = $fpath2   

我成功上传文件

$uplaod_dir = ""        

对cgi的调用没有失败,它按照预期执行了下面if的else block 。

这是文件打开 block :

if (open ( UPLOADFILE, ">$upload_dir/$filename" ))   
{
binmode UPLOADFILE;

while ( <$upload_filehandle> )
{
print UPLOADFILE;
}

close UPLOADFILE;
$msgstr="Done with Upload: upload_dir=$upload_dir filename=$filename";
}
else
{
$msgstr="ERROR opening for upload: upload_dir=$upload_dir filename=$filename";
}

我还应该对 $fpath1 执行哪些其他测试,以找出它与硬编码等效 $fpath2 的工作方式不同的原因

我确实尝试了字符替换,一次一个字符,从 $fpath2 到 $fpath1。即使使用单个字符执行此操作,也会导致 $fpath1 与 $fpath2 出现相同的错误,尽管该字符看起来完全相同。

最佳答案

您的 CGI 是否可能运行带有 -T 的 Perl (污点模式)开关(例如,#!/usr/bin/perl -T)?如果是这样,则不允许在系统操作中使用来自不受信任来源(例如用户输入、URI 和表单字段)的任何值,例如 open ,直到使用正则表达式捕获未被污染为止。请注意,使用 s///就地修改它不会取消该值的污染。

$fpath1  =~ /^([A-Za-z0-9\-\.\/]*)$/;
$fpath1 = $1;
die "Illegal character in fpath1" unless defined $fpath1;

如果污染模式是您的问题,应该可以工作。

关于linux - 文件路径名称存在问题,可能存在损坏的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15798111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com