2010-06-07 15 views
6

Quiero que los desarrolladores escriban algunas aplicaciones personalizadas para un sitio en Javascript pero quiero guardarlas en la arena para que no puedan hacer nada malo como redirigir al usuario, configurar la pantalla del cuerpo en ninguna, etc. Tengo un espacio de nombres en Javascript donde todas las funciones que usted necesitará siempre existen en allí, así que estaba pensando en crear una caja de arena sería una cuestión de:Javascript Sandbox

with(Namespace) { 
    //App code goes here where they can only access Namespace.* 
} 

¿Cómo es fácil es para evitar esto y qué otros métodos pueden estar hecho? Preferiría no tener que moderar cada aplicación enviada.

Respuesta

1

Para hacer cumplir un sandbox, debería inspeccionar el código antes de ejecutarlo, capturar cualquier código que no sea de fiar y, si lo encuentra, de alguna manera impedir que se ejecute. Muy tedioso y propenso a errores durante mucho tiempo.

Facebook hizo esto al menos en su plataforma inicial, yo, como desarrollador, definitivamente no lo disfruté. Limitaron los métodos nativos que podrían usarse y proporcionaron envoltorios limitados alrededor de algunos.

+0

De hecho, es * imposible * escribir tal inspector de código, porque puede reducirse a resolver el problema de detención;) (piense en construir' s' de alguna manera extraña y llamando 'window [s]()') – mik01aj

2

Lo primero que viene a la mente es eval. Pueden usar eso para ejecutar código personalizado fuera del entorno limitado del contenedor. Será muy difícil detener a un desarrollador determinado al intentar ajustar el código.

Link para el uso de eval.

+1

Google Caja y ADSafe pueden restringir 'eval' :-) – CMS

8

Bueno, las opciones de código de caja de arena en este momento son:

Ambas le permiten crear un ambiente seguro donde el acceso al objeto global y el DOM está restringido.

El objetivo principal de estos proyectos es permitirle incrustar widgets de forma segura y cualquier contenido web de terceros.

+0

¿También les impide modificar 'Object.prototype'? – mik01aj

Cuestiones relacionadas