Eu tenho um painel de controle da web e preciso permitir que meus usuários enviem comandos para seus aplicativos.
Tenho um problema semelhante à injeção de SQL.
$user_input='good command';
shell_exec('tmux send-keys session1:0 "'.$user_input.'" C-m');
Isso enviaria o comando tmux send-keys session1:0 "good command" C-m
, o que é bom.
Mas o usuário também pode digitar outro.
$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');
Isso enviaria o comandotmux send-keys session1:0 "good command" C-m | rm / | tmux send-keys sessionUseerMayNotDoAnyThingIn:0 "some command" C-m
(Isso enviaria 3 comandos)
tmux send-keys session1:0 "good command" C-m
rm /
tmux send-keys sessionUseerMayNotDoAnyThingIn:0 "some command" C-m
Então, qual é a solução para isso?
Responder1
Você pode usar escapeshellcmd()
para escape de comando (primeiro token) e escapeshellarg()
para escape de argumentos.