Lamento decirlo, pero esto parece una cosa realmente cuestionable de hacer. Periodo.
Hay un blog famoso de Microsoft llamado " Diez leyes inmutables de seguridad ". La Ley # 1 es:
Ley # 1: si un malvado puede persuadirte de que ejecutes su programa en tu computadora, ya no es solo tu computadora.
Hay una razón por la que es el número 1; crear una lista de "cosas malas" para bloquear es un juego perdido: para un lenguaje completo y complejo como python, siempre habrá formas más creativas de hacer cosas malas que no están en tu lista.
Le animo a considerar por qué necesita permitir que los usuarios carguen scripts, y si puede lograr la misma funcionalidad a través de un conjunto de interfaces de usuario, API REST o algún otro método estándar donde la seguridad se entiende bien .
Si absolutamente necesita permitir scripts (python o cualquier otro idioma), entonces descifraré la cantidad mínima de sintaxis de python que los usuarios necesitan para realizar lo que sea que haga su sitio y rechazaré cualquier script que use algo que no esté en eso lista. Haga su investigación sobre cada elemento en esa lista y si podría usarse para hacer una llamada al sistema o para cambiar los archivos en su sistema de archivos. Si esa lista incluye import
, entonces sabrá que está perdido de inmediato porque entonces tendrá que tratar de enumerar todo en su sys.path
y bloquear las "cosas malas", o de enumerar qué módulos utilizan los usuarios. necesitan, qué métodos dentro de esos módulos necesitan, y verificando manualmente que no se pueda hacer nada malo con ellos. Incluso suponiendo que tenga buenas listas bien investigadas, construir las expresiones regulares para aplicarlas adecuadamente es probablemente una tarea difícil en sí misma.
El otro enfoque es asumir que el servidor está totalmente comprometido todo el tiempo, no lo use para ninguna otra cosa, manténgalo en su propia red de aislamiento lejos de cualquier otro servidor que le interese, cortafuegos fuera del tráfico saliente, y derríbalo y levántate uno nuevo de vez en cuando.
La idea de permitir que los usuarios carguen y ejecuten scripts en su servidor parece un poco como permitir que adolescentes aleatorios experimenten con fuegos artificiales en su sala de estar.