웹 제어판이 있고 사용자가 응용 프로그램에 명령을 보낼 수 있도록 허용해야 합니다.
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()
인수 이스케이프에 사용할 수 있습니다 .