perl open()注射预防

Ran*_*ser 3 security perl protection code-injection

我已经读过带有2个参数的open()命令容易被注入,而带有3个参数的open()命令不能注入.

SAy我有一个目录,我的所有文件都有一个共同的前缀,即"file-"所以文件名为file-SomeSourceCode.txt

怎么样open(FILEHANDLE, "some/random/dir/file-" . $fileextension)容易受到伤害?

其中,$fileextension可以是任何类型的每说"文件名"的.据我所知,这不会受到像| shutdown -r |执行命令到服务器的文件名的影响.

ike*_*ami 9

open(my $fh, "some/random/dir/file-" . $user_text)
Run Code Online (Sandbox Code Playgroud)

是完全脆弱的.不正确的注入不仅无法打开名为的文件

some/random/dir/file-foo|
Run Code Online (Sandbox Code Playgroud)

它可以用来执行任意命令

$ perl -e'open(my $fh, "file-".$ARGV[0])' ' ; echo 0wned >&2 |'
sh: 1: file-: not found
0wned
Run Code Online (Sandbox Code Playgroud)