Javascript 防止iframe使用无限循环冻结主页面
我在iFrame中执行用户提供的javascript代码。执行的代码可能是由其他用户提交的,因此需要尽可能多地对其进行沙盒处理。iframe上的sandbox属性有很大帮助,为其使用内容安全策略也是如此 然而,我仍然需要一种方法来防止恶意代码冻结网站 我可以看到两种可能性,但不知道如何让这两种可能性都发挥作用:Javascript 防止iframe使用无限循环冻结主页面,javascript,html,iframe,infinite-loop,freeze,Javascript,Html,Iframe,Infinite Loop,Freeze,我在iFrame中执行用户提供的javascript代码。执行的代码可能是由其他用户提交的,因此需要尽可能多地对其进行沙盒处理。iframe上的sandbox属性有很大帮助,为其使用内容安全策略也是如此 然而,我仍然需要一种方法来防止恶意代码冻结网站 我可以看到两种可能性,但不知道如何让这两种可能性都发挥作用: 1:iframe中的所有代码都在专用于该iframe的辅助进程中运行。不幸的是,必须允许iframe中的代码更改iframe中包含的html。通过修改它以便加载另一个脚本,代码可以有效地
1:iframe中的所有代码都在专用于该iframe的辅助进程中运行。不幸的是,必须允许iframe中的代码更改iframe中包含的html。通过修改它以便加载另一个脚本,代码可以有效地将自身从工作程序中分离出来
2:代码确实在主线程中运行,但是有一个工作线程在监视页面。该工作人员可以通过某种方式判断网站何时因iframe而冻结,然后只杀死那些出错的脚本。无法判断代码是长时间运行还是冻结。即使是久负盛名的JSFiddle.net也没有检测到它:。你可能想好好读一读,我知道。我的意思是,如果网站在至少X秒钟内没有响应,而原因是iframe,那么它就会被杀死。我能想到的唯一方法是在iframe中有代码,以设定的时间间隔ping父节点。您可以让父对象,如果错过了n个以上的ping,则杀死iframe。但是,由于您(正确地)对iframe进行了沙盒处理,它应该无法与父对象通信。此外,如果冻结网站的代码具有足够的攻击性,它将使父帧停止运行,因此接收ping的代码将无法运行。它必须是浏览器本身中的某种东西来完成它,比如一个扩展。是否希望iframe代码能够完全控制iframe中的html?如果可以接受部分控制,那么从worker向iframe发送消息就不太困难了。这段代码是我试图实现这种有限的交互性:不幸的是,iframe中的代码需要完全控制。