不允许第三方javascript引用冻结站点

时间:2018-02-15 08:55:11

标签: javascript external freeze

首先是一些背景故事:

我们的网站通常包含Google地图:

<script src="https://maps.googleapis.com/maps/api/js?v=....></script>

然后我们的一些javascript代码初始化地图。现在突然昨天页面开始加载但完全冻结了。在Chrome中,这导致必须强制退出并重新启动。 Firefox更聪明,允许用户停止脚本执行。

经过一些调试后,我发现以前的开发人员已经包含了Google Maps API的实验版本:

https://maps.googleapis.com/maps/api/js?v=3.exp

因此Google服务器上的某些内容可能已经发生变化(完全可以理解)。这已经在我们的结尾发现了一个错误,并且两者结合导致脚本挂起并冻结网站和浏览器。

现在好了,找到并修复了bug,没有造成太大的伤害。

现在的实际问题是:

是否有可能以某种方式 sandbox 这些外部脚本引用,以便它们不会崩溃我的主站点。我从他们自己的服务器加载了大量的外部JavaScript文件(跟踪,分析,地图,社交)。

但是,此类代码可能始终发生变化,并且可能存在冻结我的网站的错误。我该如何保护我的网站?有没有办法可以定义最大允许执行时间?

我愿意接受各种建议。

1 个答案:

答案 0 :(得分:0)

脚本的来源实际上并不重要 - 无论是外部源还是您自己的服务器。无论哪种方式,它们都在客户端浏览器中运行。这使得实现所需的沙箱行为变得非常困难。

您可以使用iframe和关键字“sandbox”在DOM中获取沙箱。这样,此iframe的内容独立于您的实际网站的DOM,您也可以包含独立的脚本。但这主要有利于安全。我不确定当一个脚本有无穷无尽的循环或类似的错误时,它会如何导致整体稳定性。但imho值得一试。

有关详细说明,请参阅:https://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/