CentOS 6 - Senden Sie benutzerdefinierte Befehle von PHP

CentOS 6 - Senden Sie benutzerdefinierte Befehle von PHP

Ich habe ein Web-Kontrollfeld und muss meinen Benutzern erlauben, Befehle an ihre Anwendung zu senden.

Ich habe ein ähnliches Problem wie SQL-Injection.

$user_input='good command';
shell_exec('tmux send-keys session1:0 "'.$user_input.'" C-m');

Dadurch wird der Befehl gesendet tmux send-keys session1:0 "good command" C-m, was in Ordnung ist.

Der Benutzer könnte aber auch etwas anderes eingeben.

$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');

Dadurch wird der Befehl gesendettmux send-keys session1:0 "good command" C-m | rm / | tmux send-keys sessionUseerMayNotDoAnyThingIn:0 "some command" C-m

(Das würde 3 Befehle senden)

tmux send-keys session1:0 "good command" C-m
rm /
tmux send-keys sessionUseerMayNotDoAnyThingIn:0 "some command" C-m

Was ist also die Lösung dafür?

Antwort1

escapeshellcmd()Sie können es zum Escapen von Befehlen (erstes Token) und escapeshellarg()zum Escapen von Argumenten verwenden .

verwandte Informationen