Mi spiace dirlo, ma questa sembra una cosa davvero discutibile da fare. Periodo.
C'è un famoso blog di Microsoft chiamato " Dieci leggi di sicurezza immutabili ". La legge n. 1 è:
Law #1: If a bad guy can persuade you to run his program on your computer, it's not solely your computer anymore.
C'è una ragione per cui è il numero 1; creare un elenco di "cose brutte" da bloccare è un gioco perdente: per un linguaggio completo e complesso come Python, ci saranno sempre modi più creativi di fare cose cattive che non sono nella tua lista.
Vorrei incoraggiarti a considerare il motivo per cui è necessario consentire agli utenti di caricare script e se è possibile ottenere la stessa funzionalità attraverso un insieme di interfacce utente, API REST o altri metodi standard in cui la sicurezza è ben compresa .
Se è assolutamente necessario consentire script (Python o qualsiasi altro linguaggio), quindi vorrei capire la quantità minima di sintassi python che gli utenti devono realizzare qualunque sia il tuo sito e rifiutare qualsiasi script che usi qualcosa non su quello elenco. Fai la tua ricerca su ogni elemento di quella lista e se potrebbe essere usato per effettuare una chiamata di sistema o altrimenti cambiare i file sul tuo filesystem. Se quell'elenco include import
, allora sai di essere affondato subito, perché poi stai cercando di enumerare tutto sul sys.path
e bloccare le "cose cattive", o provare ad enumerare quali moduli utenti bisogno, quali metodi all'interno di quei moduli di cui hanno bisogno, e verificando manualmente che nulla potrebbe essere fatto con loro. Anche supponendo che tu abbia dei buoni elenchi ben studiati, costruire le espressioni regolari per applicare correttamente l'elenco è probabilmente un compito difficile di per sé.
L'altro approccio è assumere che il server sia totalmente compromesso tutto il tempo, non usarlo per nient'altro, tenerlo nella propria rete di isolamento lontano da qualsiasi altro server a cui tieni, firewall da qualsiasi traffico in uscita, e abbattetelo e alzatene uno nuovo ogni tanto.
L'idea di permettere agli utenti di caricare ed eseguire script sul tuo server sembra un po 'come lasciare che i ragazzi a caso sperimentino i fuochi d'artificio nel tuo salotto.