2012-06-29 13 views
8

Sto tentando di costruire un sito di codifica educativo, simile a Codecademy, ma sono francamente in perdita su quali misure dovrebbero essere prese. Potrei essere indicato nella giusta direzione includendo anche un semplice interprete python in una webapp?Come incorporare un interprete Python su un sito web

+0

Non sono il più esperto con gli strumenti di sviluppo web. Spero di imparare il più possibile da un progetto con un obiettivo ambizioso! – twoxmachine

+0

Dai un'occhiata a questo: http://doc.pypy.org/en/latest/sandbox.html – ChristopheD

+0

Grazie mille, @ChristopheD. Lo leggerò. – twoxmachine

risposta

8

Un'opzione potrebbe essere l'uso di PyPy per creare un python sandbox. Limiterà le operazioni esterne che qualcuno potrebbe fare.

Una volta configurato, il sito Web prenderà il codice sorgente, lo invierà tramite ajax al server Web e il server eseguirà il codice in un sottoprocesso di un'istanza python sandboxed. Potresti anche essere in grado di terminare il processo se impiega più tempo di almeno 5 secondi. Quindi si restituisce l'output come risposta al client.

Vedi questi link per aiuto su una sandbox PyPy:
http://doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html

Per creare un REPL completamente interattivo sarebbe ancora più coinvolto. Avresti bisogno di mantenere vivo un interprete per ogni client sul tuo server. Quindi accetta ajax "linee" di input ed eseguili attraverso l'interp comunicando con il processo in esecuzione e restituisci l'output.

Nel complesso, non banale. Avresti bisogno di alcune forti capacità di sviluppo per farlo comodamente. Potresti trovare questa attività un po 'scoraggiante se stai semplicemente imparando.

+0

Grazie per aver illustrato i passaggi che dovrò prendere. Ho pensato che un progetto come questo potrebbe essere difficile. Ti sono grato per avermi dedicato del tempo per mostrarmi le corde! – twoxmachine

3

C'è altro da fare qui di quanto si pensi.

Il problema principale è che non è possibile che consenta alle persone di eseguire codice Python arbitrario sul server web. Ad esempio, cosa succede se lo fanno

import os 
os.system("rm -rf *.*") 

Quindi chiaramente devi eseguire questo codice Python in modo sicuro. Ma poi hai il problema di proteggere Python, che è fondamentalmente impossibile a causa della sua dinamicità. E quindi probabilmente dovrai eseguire la shell Python in una macchina virtuale, che viene fornita con i suoi mal di testa.


Avete visto per esempio http://code.google.com/p/google-app-engine-samples/downloads/detail?name=shell_20091112.tar.gz&can=2&q=?

+0

Passando attraverso alcune ricerche, ero a conoscenza di alcuni dei problemi di sicurezza coinvolti nel consentire il codice arbitrario. Grazie per avermi mostrato un esempio concreto, mi ha chiarito un bel po '! Passerò alla shell AJAX che hai collegato per cercare di capire come è stata implementata. Apprezzo che tu me l'abbia mostrato. – twoxmachine

1

Un'opzione recente per questo è utilizzare repl.

Questa opzione è impressionante perché i compilatori sono realizzati utilizzando JavaScript in modo che il compilation e esecuzione è fatto nel lato utente, il che significa che il server è privo di vulnerabilità.

Hanno compilatori per: python3, Python, Javascript, Java, Ruby, PHP ...

vi consiglio vivamente di controllare il loro sito a http://repl.it

1

sguardo nel LXC contenitori. Hanno una bella API che puoi usare per creare contenitori leggeri di linux. Potresti eseguire i comandi di sottoprocesso all'interno di quel contenitore in questo modo l'utente finale non potrebbe interferire con il tuo server principale.

Problemi correlati