我有一个网络控制面板,我需要允许我的用户向他们的应用程序发送命令。
我遇到了与 SQL 注入类似的问题。
$user_input='good command';
shell_exec('tmux send-keys session1:0 "'.$user_input.'" C-m');
这将发送命令tmux send-keys session1:0 "good command" C-m
,这很好。
但用户也可以输入其他内容。
$user_input='good command" C-m | rm / | tmux send-keys sessionUserMayNotDoAnyThingIn:0 "some command';
shell_exec('tmux send-keys session1:0 "'.$user_input.'" C-m');
这将发送命令tmux send-keys session1:0 "good command" C-m | rm / | tmux send-keys sessionUseerMayNotDoAnyThingIn:0 "some command" C-m
(这将发送 3 条命令)
tmux send-keys session1:0 "good command" C-m
rm /
tmux send-keys sessionUseerMayNotDoAnyThingIn:0 "some command" C-m
那么这个问题的解决方案是什么呢?
答案1
您可以将其escapeshellcmd()
用于命令转义(第一个标记)和escapeshellarg()
参数转义。