2011-12-08 29 views
8

Tengo python incrustado en una aplicación como una plataforma de scripts para que los usuarios puedan escribir scripts de Python. Estoy tratando de evitar las importaciones para que no puedan causar daños de todos modos y tengan que apegarse a la API proporcionada.Prevención de importaciones en Python

he llegado con el siguiente código Python:

__builtins__ .__import__= None 
reload = None 

esto parece impedir las importaciones y evita la carga de módulos. Se requiere la prevención de la recarga para que no puedan volver a cargar los builtins devolviéndoles una importación que funcione.

Sin embargo, no soy un experto en Python. ¿Hay algo más que me falta que el usuario todavía puede hacer para importar módulos?

Gracias

+3

Por favor, eche un vistazo a esta [pregunta] (http://stackoverflow.com/q/3068139/183066). – jcollado

+1

Gracias. A partir de esa publicación, se resalta que en realidad hay muchas otras cosas peligrosas además de la importación, por lo que evitar la importación probablemente no sea suficiente. –

+0

Si el usuario ejecuta una aplicación en su máquina, ¿qué puede ser "peligroso" para permitirle hacer un uso completo de Python? ¿O su aplicación recibirá secuencias de comandos en un servidor de usuarios remotos no confiables? – jsbueno

Respuesta

2

Lo que probablemente desea es ejecutar Python en un entorno limitado. Hay varias maneras de hacerlo, por ejemplo, PyPy tiene sandboxing support.

También podría probar sandboxing el proceso de Python utilizando herramientas externas, pero supongo que esto depende del sistema operativo.

+1

Gracias por el enlace sobre sandboxing. Realmente estaba buscando algo que funcionara de manera más general sin PyPy. El código que publiqué funciona tanto en CPython como en IronPython, por ejemplo. –

+0

Es fácil hackear algo para evitar las importaciones, y es probable que las personas inteligentes siempre puedan anularlo. Pypy implementa sandboxing en su estructura, hecho de la manera correcta. – jsbueno

Cuestiones relacionadas