我通過SSH將動態shell命令傳遞給使用ssh2
庫的PHP
服務器。我傳遞的命令是(注意,這僅僅是一個例子,命令是動態的和用戶生成的)。使用特殊字符通過SSH傳遞shell命令
$command = 'ls -al
free -m';
注意換行,這是必需的,因爲用戶可以鍵入用換行和標籤完整的bash腳本。於是,我做了以下構建實際的命令是互斥的庫來執行:
$command = str_replace("'", "\'", $command);
$command = 'echo $\'' . $command . '\' | bash';
這導致了最後的命令:
echo $'ls -al
free -m' | bash
上面的命令在shell直接執行罰款,但是當我用SSH2從PHP執行它,我越來越:
ls: invalid option --
Try `ls --help' for more information.
所以我就想,好吧,必須有一些特殊字符或美元符號沒有被轉義,所以我所做的:
print_r(bin2hex($command));
這導致:
6563686f2024276c73202d616c0d0a66726565202d6d27207c2062617368
六角轉換成ASCII碼返回正確的命令(如以上精確地)雖然。
任何想法可能會造成這種情況?
解釋爲什麼這樣設置是個漫長的故事。除了安全。真的,當你複製並粘貼'$ command'的內容時,你會得到一個bash錯誤?我不在CentOS中。 – Justin
我的確如此。雖然錯誤是不同的。我得到'ls:無效選項 - 'e'' – Ariel
我編輯了張貼,請閱讀頂部以查看更好的解釋。 – Justin