У меня есть сценарий 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.
$file
безвреден или лишен символов оболочки. Например$file = "a space.txt"
не подойдет. - person tadman   schedule 31.01.2020