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