gpt4 book ai didi

perl - 如何清理 Perl 中打开文件的输入

转载 作者:行者123 更新时间:2023-12-02 05:21:00 27 4
gpt4 key购买 nike

我有一个 Perl 脚本,它打开一个文件,处理它并打印一些输出。输入文件被 gzip 压缩。

$file 的路径作为参数传递给脚本。

以下是我当前使用的解决方案:

open(my $fh, "-|", "$gzcat $file") or die("Cannot open $file$!");

该脚本最近在Checkmarx的安全审核中失败,出现以下错误:

<script> gets user input for the $fh element. This element’s value then flows through the code without being properly sanitized or validated and is eventually displayed to the user in method <method>. This may enable a CrossSite-Scripting attack.

我尝试使用 perl -f 验证文件是否存在,并使用 $file =~ s/[^A-Za-z0-9_\-\.\/]//g; 删除不需要的字符。 ,但它不满足 Checkmarx。

我想知道清理包含 Perl 中文件路径的输入的正确方法是什么。

最佳答案

只要您使用的是支持 fork 的 Perl 5.8 或更高版本的操作系统,或者 Windows 上的 5.22 或更高版本,您就可以在运行命令时使用管道打开的列表形式绕过 shell。这可以避免文件名包含 shell 将解释的元字符(例如 & 和空格)的问题。

open(my $fh, "-|", $gzcat, $file) or die("Cannot open $file: $!");

但是,这并不是所要求的验证或清理,但避免漏洞和不当行为很重要。所提到的跨站点脚本可能性是由于显示的文件名所致,如下所述;例如,如果它显示在 HTML 页面中,则必须对它进行 HTML 转义,大多数模板系统都有执行此操作的方法。

关于perl - 如何清理 Perl 中打开文件的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60009766/

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