В вашем сценарии есть много вещей, которые нуждаются в заботе, и о большинстве из них я рассказываю в главе "1001 * Мастеринг Perl " "Методы безопасного программирования". Вы также можете найти некоторые из них в perlsec /
Поскольку вы берете внешние данные и передаете их другим внешним программам, вам следует использовать проверку заражения, чтобы убедиться, что данные соответствуют вашим ожиданиям. Что если бы кто-нибудь смог проникнуть в эти файлы что-то еще?
Если вы хотите передать данные во внешние программы, используйте system в форме списка, чтобы у оболочки не было возможности интерпретировать возможные метасимволы.
Вместо того чтобы полагаться на PATH
при поиске программ, которые вы ожидаете запустить, укажите их полные пути в явном виде, чтобы убедиться, что вы, по крайней мере, запускаете файл, который вам кажется (а не кем-то, кто проник в каталог, ранее в PATH
). Если вы действительно были параноиком (например, проверка на зараженность), вы также можете проверить, что эти файлы и каталоги имеют соответствующие разрешения (например, не доступны для записи).
Так же, как бонусная заметка, если вам нужна только одна строка из дескриптора файла, вы можете использовать оператор ввода строки в скалярном контексте:
my $date = <$fh>;
Вы, вероятно, тоже хотите сжать данные, чтобы избавиться от возможных завершающих строк новой строки. Даже если вы не думаете, что должен быть завершающий символ новой строки, потому что файл был создан другой программой, кто-то, просматривающий файл в текстовом редакторе, может добавить его.
Удачи,:)