2009-08-18 11 views
10

Sto cercando di ottenere exec lavorando su un server Windows e ricevendo il messaggio di errore "Impossibile fork". Dopo aver consultato un po 'il problema, sembra che la soluzione consigliata sia quella di fornire le autorizzazioni READ ed EXECUTE dell'account IUSR a c: \ Windows \ System32 \ cmd.exe.PHP exec è sicuro?

Ma quello è stato un grosso buco di sicurezza vero? È sicuro? C'è un altro modo per eseguire [da php] un exe residente sul server?

risposta

14

di cui ha bisogno per eseguire cmd.exe di Windows perché quando il PHP vede questo:

exec("foo -bar -baz"); 

Si chiama questo:

cmd /c foo -bar -baz 

E 'solo un buco di sicurezza se si lascia che l'utente immettere i parametri. Vale a dire non si dovrebbe fare questo:

// DO NOT DO THIS! 
exec("foo -bar=" . $_GET['bar']); 

Invece, si dovrebbe sterilizzare i parametri con escapeshellarg.

// This is okay. (Be sure foo.exe can handle unexpected input!) 
exec("foo -bar=" . escapeshellarg($_GET['bar'])); 
+4

La funzione exec è sicura come si fa. Finché utilizzi le funzioni di escape corrette come mostrato qui, starai bene. –

+1

Mentre è possibile rendere sicuri i comandi dello script, un vettore di attacco comune è caricare uno script dannoso e usare 'exec' e funzioni simili per hackerare il server. Come tale, molti ambienti di hosting condiviso disabilitano questa e qualsiasi altra funzione in grado di eseguire un argomento di shell. – Machavity

1

Una cosa che si dovrebbe tenere a mente è che la creazione di un processo sotto Windows comporta un sovraccarico maggiore di quanto non faccia su sistemi operativi Unix-classe. Se si dispone di un numero elevato di utenti, chiamare ripetutamente lo exec() potrebbe impantanare il server. Se si prevede un carico pesante sul server, si consiglia di considerare l'esecuzione continua di un processo di lavoro come Windows service

+0

Lo stesso problema può verificarsi su Windows e Linux. – Brad