JavaScript Endurecido proporciona aislamiento a través de compartimentos, bloqueo y endurecimiento. Los compartimentos permiten el aislamiento de procesos o pestañas, mientras que el bloqueo repara y congela los globales del lenguaje para eliminar la contaminación del prototipo. La función de endurecimiento protege objetos específicos del código no confiable. La implementación del compartimento es una propuesta en etapa temprana impulsada por los responsables de congelar objetos, usar estricto y promesa. Lava Mode fue creado para proteger Metamask, una extensión de navegador, y utiliza un empaquetador basado en browserify.
Y sobre eso, podemos construir la parte de Lavamode que decide qué puede ser accedido por quién.
Bien, entonces JavaScript Endurecido son tres cosas. Una es el compartimento. Es algo que proporciona este aislamiento. Así que puedes tener compartimentos en un proceso en tu aplicación o en una pestaña en tu navegador. Puedes tener varios compartimentos que están aislados entre sí. Y para que eso sea seguro y para evitar dejar algo en el lenguaje que pueda ser manipulado, tenemos el bloqueo. El bloqueo es algo que ejecutas al inicio de tu aplicación. Y va a utilizar la flexibilidad de JavaScript para eliminar la flexibilidad de JavaScript. Así que el bloqueo reparará y luego congelará todos los globales que son parte del propio lenguaje. Así que el prototipo de objeto ya no será algo con lo que el código malicioso pueda jugar para hacer contaminación de prototipo. El bloqueo prácticamente elimina el tipo de ataque de contaminación de prototipo global. Y por último, pero no menos importante, endurecer. Endurecer es una función que puedes usar para proteger un objeto específico que quieres pasar a algún código que necesita usarlo, pero no quieres confiar plenamente en esa cosa. Así que puedes usar endurecer en tu aplicación cuando estás pasando algunos objetos a una función de dependencia y los estás recuperando y luego procesándolos aún. Así que, ya sabes, pueden reemplazar un array con algo que simplemente tiene el método reduce y va a implementar algo completamente diferente como el método reduce.
Bien, y los compartimentos, o para ser más precisos, todo lo que está detrás de la implementación del compartimento va a formar parte del lenguaje. Bueno, eventualmente, es una propuesta en etapa temprana. Ha habido un montón de progreso en la virtualización de la carga del módulo. Esto está ocurriendo en 2C39, y eventualmente obtendremos todas las partes que son necesarias para construir un compartimento en el propio lenguaje. Y estas están siendo impulsadas por personas que son responsables de traernos cosas como congelar objetos, usar estricto o promesa. Así que tengo esperanzas.
Y estamos en una conferencia que no es exactamente sobre Node. Así que mi ejemplo anterior probablemente fue menos interesante, pero tenemos un empaquetador. Así que Lava Mode fue creado para proteger Metamask, la cartera de criptomonedas, y Metamask resulta ser una extensión de navegador. Así que necesita ser construido, y también necesita ejecutarse bajo una política de seguridad de contenido que impide el uso de eval. Y la implementación actual de JavaScript Endurecido tiene que usar eval para construir un evaluador. En el futuro, el evaluador también será parte del lenguaje, pero por ahora, necesitamos un evaluador, pero no tienes que usar un evaluador que esté construido sobre eval. Si resulta que eres un empaquetador. Así que tenemos un empaquetador basado en browserify porque browserify era el más flexible y era la fruta más fácil de alcanzar.
Comments