2014-04-30 100 views
1

我根本不知道perl,但我需要更改退出程序以提供更清晰的調試輸出。Perl安全性,打印聲明?

這是結:

print $lfh "$ts\t$tid\t$msg\n";

其中$味精會被加入函數的參數是這樣被創建:在$味精

my $msg = join("\t", @_);

某處,我想在調用程序時添加用戶提供的命令行參數之一。如果打印到標準輸出,是否存在利用漏洞的風險?

open my $lfh, ">>", $ENV{GL_LOGFILE}

的信息,我可以:

還要注意$ LFH將來自環境變量的採取,如果它是寫一個文件,就像這樣(通過腳本本身早些時候設定) perl安全上找不到關於打印聲明,所以也許我只是完全偏執狂,但比對不起更安全...

+0

環境可以視爲用戶輸入,所以它需要某種消毒。使用'open'三個參數是一個優點。如果STDOUT輸出不被執行,它不應該構成威脅。 –

回答

0

你可以傳遞任意數據到print,它不會中斷。但是:

  • 打印到文件句柄可能會經歷各種IO層(如編碼)。並非所有數據都可能對這些圖層有效。例如。編碼層將使用替換字符或在傳送無效數據時終止腳本。

  • Perl的print不關心控制字符,如NULs,退格或回車,只是通過它們。根據輸出的查看方式,它可能看起來混亂或可能會破壞查看應用程序。例如:用戶輸入等於字符串"\rHAHA"。當您打印"something$userinput"時,控制檯上顯示時可能會看到HAHAthing,因爲回車將光標置於第1列。如果用戶輸入包含換行符,則可以打破輸出記錄,例如, "foo${userinput}bar"可能會成爲foobar這兩行。

  • 如果輸入是機密信息,輸出也是保密的,所以你應該確保輸出不能被任何人查看。例如。在網頁上顯示包含調試信息的輸出可能會使攻擊者獲得有關係統的更多信息。