So che non è possibile limitare in modo sicuro le normali capacità di CPython per eseguire correttamente il codice straniero senza consentire ad esso di accedere ad alcuni builtin come open()
o consentire altri tipi di I / O.
Così ho studiato di più e ho trovato gli interpreti alternativi PyPy (scritto in Python) e Jython (scritto in Java). Quale di questi è più facile da utilizzare per gli script utente sandboxing che devono interagire con l'applicazione principale?
Ecco una breve descrizione di cosa dovrebbe fare il mio programma e cosa è importante per me:
Il programma sarà un gioco multiplayer che può essere eseguito su qualsiasi PC come server e che consente a qualsiasi numero di client di connettersi localmente o in rete. Il gioco è una normale strategia a base rotonda (risorse minerarie, sviluppo di una base strong, conquista territori, elimina nemici), ma le unità non devono essere controllate direttamente tramite mouse / tastiera, ma solo tramite script e comandi Python che i giocatori possono caricare al server e che vengono eseguiti ogni round per determinare le azioni. L'idea di questo progetto viene dal link , ma non vorrei creare un clone esatto ma solo qualcosa di simile ...
I punti importanti sono:
-
sandboxing sicuro degli script utente. Voglio che gli utenti debbano scrivere una classe derivata da una determinata sottoclasse che ha delle funzioni per accedere al nucleo del gioco. Non dovrebbe esserci alcuna possibilità di eseguire alcun I / O o accesso al sistema se non attraverso questi metodi. Le importazioni devono essere limitate solo a strumenti come
string
emath
, nessun materiale potenzialmente pericoloso comeos
osubprocess
. - buon supporto per il multi-threading reale , poiché dovrei eseguire quanti più script utente in parallelo possibile per mantenere basse le durate del round.
- L'interprete dovrebbe essere abbastanza veloce e leggero da gestire parecchi client in parallelo. Ho anche bisogno di un efficiente accesso al database con cache intelligente (probabilmente devo codificarmi anch'io?) Che acceleri i tempi di accesso ai dati senza inondare la RAM.
Conosco anche Java abbastanza bene, quindi potrei scrivere anche parti del core del gioco in Java se questo potrebbe velocizzare le cose o renderle più sicure, ma voglio che gli script degli utenti siano in Python 3.
Quindi, di nuovo, quale interprete Python sarebbe più adatto per questo compito? Quali (dis) vantaggi ha ciascuno rispetto ai requisiti elencati?