por ejemplo, proyectos de programación CodePen y Khan Academy . permiten que sus usuarios carguen scripts js que se ejecutarán en otras computadoras, codepen incluso permite que los usuarios con una cuenta pro usen bibliotecas de terceros. Quiero hacer lo mismo en mi sitio, ¿qué tan peligroso es esto? ¿Cómo minimizar los riesgos?
Es relativamente bastante seguro si implementa un sandboxing adecuado.
Lo único que desea evitar es permitir que el código de usuario se ejecute en el nivel superior de los navegadores de otros usuarios, porque si lo permite, todos los datos que el otro usuario tiene en el sitio web podrían recuperarse, registrarse y robarse, entre otras cosas. Pero si se asegura de que el código de usuario no se ejecute en el nivel superior, sino dentro de un iframe de espacio aislado (uno que no puede hacer que la ventana superior ejecute nada), probablemente estará bien.
Consulte esta pregunta en Meta Stack Overflow para obtener una discusión similar sobre el problema. Los sitios que mencionó y otros sitios que implementan editores de código en vivo de usuarios como Stack Overflow y JSFiddle y muchos más usan esta técnica de ejecutar el código de los usuarios dentro de un iframe de espacio aislado, por lo que el código que se ejecuta no puede llegar a la ventana de nivel superior , cuyos datos deben mantenerse seguros. El iframe también debe usar un origen diferente (si lo hay) del sitio principal: los navegadores modernos naturalmente han implementado restricciones bastante estrictas para la comunicación entre sitios precisamente por este tipo de razón (de modo que un iframe de un origen puede hacer muy poco para un ventana principal en otro origen, a menos que la ventana principal esté configurada específicamente para tales cosas).
Digo que un iframe de espacio aislado es bastante seguro, pero no absolutamente seguro, porque no es imposible que algo como Spectre pueda eventualmente ser explotado en JavaScript front-end para hacer algo malicioso realmente productivo. No creo que se haya visto en la naturaleza todavía, y puede que nunca se vea, pero no es imposible.