Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止iframe使用无限循环冻结主页面_Javascript_Html_Iframe_Infinite Loop_Freeze - Fatal编程技术网

Javascript 防止iframe使用无限循环冻结主页面

Javascript 防止iframe使用无限循环冻结主页面,javascript,html,iframe,infinite-loop,freeze,Javascript,Html,Iframe,Infinite Loop,Freeze,我在iFrame中执行用户提供的javascript代码。执行的代码可能是由其他用户提交的,因此需要尽可能多地对其进行沙盒处理。iframe上的sandbox属性有很大帮助,为其使用内容安全策略也是如此 然而,我仍然需要一种方法来防止恶意代码冻结网站 我可以看到两种可能性,但不知道如何让这两种可能性都发挥作用: 1:iframe中的所有代码都在专用于该iframe的辅助进程中运行。不幸的是,必须允许iframe中的代码更改iframe中包含的html。通过修改它以便加载另一个脚本,代码可以有效地

我在iFrame中执行用户提供的javascript代码。执行的代码可能是由其他用户提交的,因此需要尽可能多地对其进行沙盒处理。iframe上的sandbox属性有很大帮助,为其使用内容安全策略也是如此

然而,我仍然需要一种方法来防止恶意代码冻结网站

我可以看到两种可能性,但不知道如何让这两种可能性都发挥作用:


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中的代码需要完全控制。