2012-02-11 16 views
6

Sto sviluppando una piattaforma che consente agli utenti di creare app utilizzando PHP. C'è un modo sicuro per consentire agli utenti di fare questo? Riesci a limitare l'uso di funzioni che potrebbero danneggiare il codice sorgente esistente o il server in ogni caso? Voglio solo che siano in grado di utilizzare le funzioni di base e dargli accesso a 1 database. Questo deve essere possibile, a causa dell'esistenza di server condivisi, gestito da molti utenti. ...Esiste un modo sicuro per consentire agli utenti di aggiungere il proprio PHP al mio server?

Qualche consiglio?

risposta

3

È possibile elencare tutte le funzioni disabilitate nel proprio php.ini. Puoi impostarlo in modo diverso per ogni vhost

disable_functions = "exec,passthru" 

Gli host in condivisione stanno facendo esattamente la stessa cosa che ho affermato sopra.

Altre funzioni che possono essere considerati Diable readfile, fopen, fsockopen, popen, file_get_contents, includere, stream_context_create, chmod, chown

elenco completo può essere consultato here

Ma se si sta utilizzando anche queste funzioni all'interno del tuo codice, è meglio rendere tutti i file di codice in sola lettura per l'utente apache o per tutti, in questo caso chown e chmod disabilitazione giocano un ruolo importante.

+1

È possibile eseguire questa operazione anche in una configurazione di vhost. – remy

+0

@remy buona cattura.Modificato –

+0

qual è il punto in cui si disabilita Eval? –

1

Ho usato per eseguire un server condiviso utilizzando PHP safe mode, ma a quanto pare è deprecato ora.

Una soluzione migliore consiste nell'eseguire i processi PHP di ciascun utente con un account utente diverso, in una prigione chroot, e lasciare che il sistema operativo si preoccupi della sicurezza. Gli utenti saranno in grado di caricare ed eseguire codice arbitrario, ma fintanto che è correttamente sandbox, non saranno in grado di fare molto male.

È inoltre possibile utilizzare la quota del disco. Utilizzare ulimits per l'utilizzo della memoria per utente e considerare la possibilità di disabilitare le connessioni di rete (in entrata e in uscita).

Per il database, è sufficiente impostarli con un singolo database, con accesso solo al proprio, e non concedere loro i privilegi per crearne altri.

3

Mai fatto prima, ma penso che questo approccio possa aiutarti in un ambiente sano e sicuro.

Se si utilizza Ubuntu (basato su Debian), si consiglia di creare uno jailed chroot. Dal link

Un chroot è fondamentalmente una directory speciale sul computer che impedisce alle applicazioni, se eseguito da dentro quella directory, dal l'accesso ai file al di fuori della directory. In molti modi, un chroot è come che installa un altro sistema operativo all'interno del sistema operativo esistente .

È inoltre necessario installare un'istanza dedicata di PHP che deve essere utilizzata dalle applicazioni eseguite all'interno delle directory di chroot.

È possibile configurare il php.ini con "max_execution_time", "disable_functions", ... ecc

questo è esattamente ciò che serve realmente.

Problemi correlati