我想知道一个网络工作者是否是沙箱不受信任的javascript代码的安全方式。例如,在绘图应用程序的上下文中,开发人员可以在其中实现新的绘图工具,您可以将他们的代码放在webworker中,并且每当用户点击画布时,向他们发送包含光标位置的JSON消息,以及图像数据数组,当脚本完成后,它会传回包含新图像数据的消息。
这是安全的,还是存在我没想到的风险?
答案 0 :(得分:9)
Web工作者无法使用DOM,但可以访问同源的内容,例如indexedDB
。请参阅我的相关问题:
Can workers be secure enough for an untrusted code
安全的方法是使用iframe的sandbox
属性:
http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/
另请查看我的库,它简化了过程并提供了与沙箱的便捷连接(函数导出而不是消息传递):
答案 1 :(得分:2)
问题在于开发人员是否期望DOM访问。除非整个代码仅用于数据,否则不允许Web Workers处理DOM。
我建议您从主域中沙箱整个应用程序,类似于JSFiddle在iframe中运行所有内容的方式。这样,所有潜在危险的代码只能在该框架中工作,而所有其他的东西,如登录,都在框架外处理,在主域中处理,远离潜在的危险代码。
最重要的是,只需包含安全代码。在将代码合并到主应用程序之前查看代码。