Costruire un codificatore dedicato in PHP

3

Sono autore di un crescente framework, incentrato sulla costruzione dell'interfaccia utente in PHP . I requisiti essenziali per la riprogettazione del sito web in fase di sviluppo sono la possibilità di eseguire esempi di codice . Sono disposto ad estendere questa opzione agli autori aggiuntivi che significherebbero altre persone in grado di eseguire codice sul mio server.

Si prega di suggerire come configurare in modo sicuro l'ambiente che mi permetterebbe di eseguire codice PHP di terze parti costruito sul mio framework. Mi piacerebbe ascoltare le idee di qualcuno che ha avuto esperienza con la creazione di soluzioni in modalità sandbox.

    
posta romaninsh 09.01.2013 - 15:42
fonte

1 risposta

2

Non ho esperienza negli ambienti di sandboxing, ma qui ci sono i miei 2 centesimi:

Ho lavorato su Google App Engine, sia Java che Python e GAE ha il proprio ambiente sandbox. Parlando di consentire agli utenti di eseguire il codice, scherzi / utenti malvagi potrebbero provare ad abusare del tuo server a livello di programmazione o possono effettuare transazioni illegali (tramite chiamate http) dal tuo server. Inoltre non ho molta conoscenza in PHP, quindi scusami per eventuali ipotesi sbagliate.

Abusing your server:

CPU : potrebbero scrivere un ciclo continuo senza fine che consuma solo la CPU. Potrebbero scrivere codice con un elevato utilizzo della CPU.

Memoria : potrebbero scrivere codice creando oggetti in memoria e non liberandoli.

Cosa fa Google:

  • Hanno un limite di 30 secondi per elaborare la richiesta, dopo 30 secondi, uccidono il thread.
  • Menzionano in TOS che possono rimuovere l'app se consuma una CPU più alta. Forse hanno trigger automatici che mostrano le app che non utilizzano la CPU in modo efficiente.

Cosa potresti fare:

  • Limita il tempo di esecuzione del codice, diciamo 10 o 15 secondi (o anche meno) a seconda dei casi d'uso.
  • Mentre il programma è in esecuzione, registra le statistiche della CPU di ogni esecuzione del programma (con nome utente) e segnala quegli utenti che eseguono frequentemente codice inefficiente e emette un avviso / li manda in blocco.
  • Immagino che avresti avviato ogni codice inviato dall'utente in un nuovo processo, limitando la memoria di quel programma, ad esempio 32 MB. Scegli il numero in base alla necessità.

Illegal network activity:

Potrebbero inviare email / hit server per raschiare dati. È illegale raschiare il contenuto di diversi siti.

Se le richieste HTTP sono fuori ambito nel tuo contesto, trova un modo per disabilitare qualsiasi codice di richiesta HTTP. Se è necessario fornire questa funzionalità, suppongo che si dovrà monitorare la larghezza di banda consumata da ciascun utente che esegue i propri programmi. Chiunque usi oltre qualche KB (dal momento che non scaricano i media come fanno i browser) è discutibile. Posso pensare ad un'altra alternativa per questo caso, che ritengo sia fattibile. Ne parlerò comunque - La soluzione richiede Javascript: dal codice inviato, filtrare le richieste HTTP, eseguire le richieste HTTP dal browser del mittente del codice stesso (utilizzando JavaScript, ovviamente), una volta ricevuta la risposta, inviare il codice e la risposta al tuo server per l'elaborazione. Elimina il tuo server dall'equazione delle richieste HTTP esterne. Tuttavia, sarà davvero necessario bloccare anche le richieste di rete dal processo sul lato server.

Spero che questo aiuti.

PS: per qualche ragione, credo che questa domanda appartenga a Stackoverflow. Hai provato lì?

    
risposta data 17.01.2013 - 15:36
fonte

Leggi altre domande sui tag