通过SSH连接发送东西的市长潜在安全问题是远程shell是不可避免的。换句话说,每次请求SSH执行命令时,而不仅仅是 fork+exec '给定命令( @CMD ),它实际上称为shell( $LOGIN_SHELL -c $CMD ),所以必须正确引用命令参数。
fork+exec
@CMD
$LOGIN_SHELL -c $CMD
你自己已经在做引用了,代码对我来说似乎是正确的。但无论如何,你可以让Net :: OpenSSH为你做这件事并且不用担心:
my $safe_path = $ssh->shell_quote($path); $ssh->system("cat >>$safe_path");
最后,实际上,有一种方法可以避免shell:使用SFTP。
Net :: OpenSSH与Net :: SFTP :: Foreign集成,您可以使用它轻松地访问远程文件系统。