2010-04-01 13 views
7

Nel sito Ideone un utente carica il codice da eseguire su un server remoto. Questo è simile alle funzioni di un giudice online.Come proteggere un giudice online contro il codice dannoso?

Il problema è che gli utenti possono caricare codice che tenta di "hackerare" il sistema. Capisco che in C e C++ è facile disabilitare un certo insieme di chiamate di sistema (patch qualche .dll), ma non sono così sicuro di altre lingue.

Come proteggi il tuo sistema se dovessi supportare linguaggi di livello superiore (Erlang, Haskell) sul giudice online?

+0

Si potrebbe voler cercare il progetto "safeexec" su GitHub – daveagp

risposta

2

Esegui in una sandbox come utente non privilegiato. Questo non è assolutamente infallibile, ma rende il bar per fare danni durevoli o compromessi gravi molto alti. Inoltre, non dipende da possibili opzioni o modifiche al tempo di esecuzione della lingua in questione. Se hai a che fare con un linguaggio completamente compilato (cioè senza interprete di runtime), puoi farlo anche tu.

Ad esempio, prendere Erlang. Configura uno chroot jail che contenga solo ciò di cui hai bisogno per eseguire Erlang. Aggiungi un account utente non privilegiato e una home directory. Immettere il codice da eseguire, verificare tutte le autorizzazioni di file/directory, passare all'UID non privilegiato ed eseguire il codice.

È possibile trovare istruzioni più dettagliate sulla configurazione delle prigioni nell'articolo di Wikipedia di cui sopra. Le procedure e i requisiti sono leggermente diversi per i diversi sistemi operativi.

Problemi correlati