Sto codificando un'interfaccia web in un orribile software propiziatorio utilizzato dalla nostra azienda. Il software non ha un'interfaccia utente reale e ci impone di dare accesso al nostro sistema per far sì che i nostri clienti possano persino estrarre dati. La mia interfaccia web deve eseguire una funzione exec();
e deve passare alcune variabili immesse dall'utente.Il modo migliore per disinfettare il comando exec con le variabili inserite dall'utente
$command = "report-call '$type' '$study' '$server' '$tag' '$specopt1' '$specopt2' '$specopt3' '$specopt4'";
$last_line = exec($command, $output, $returnvalue);
Ora presumo che potrei essere in grado di rimuovere un qualsiasi punto e virgola dalla $command
varible ed essere al sicuro, ma non sono sicuro ed è per questo che sto in posa questo qui prima di andare in diretta il mese prossimo.
Quale sarebbe il modo migliore per disinfettare $command
? Ci sono alcuni caratteri speciali che ho bisogno di essere nelle variabili [ ] < > ! # $
.
Eliminata la mia risposta perché a quanto pare stavamo digitando contemporaneamente, ma avete fornito esempi decenti. Collegamenti al manuale: http://us.php.net/manual/en/function.escapeshellarg.php, http://us.php.net/manual/en/function.escapeshellcmd.php –
Grazie, @ AC - aggiungendo i collegamenti ora – gahooa
Solo una nota che 'escapeshellcmd()' in realtà non scappa '!', quindi se stai eseguendo il comando in es. Bash, sei ancora vulnerabile alla sostituzione dei comandi (ad es. 'This-is-a-test-! 467' dove'! 467' sarà sostituito da qualsiasi cosa sia il numero 467 nella cronologia della shell). 'escapeshellarg()' lo allevia. – madsen