如何精确检测JavaScript代码中可能存在的隐蔽死循环?
- 内容介绍
- 文章标签
- 相关推荐
本文共计907个文字,预计阅读时间需要4分钟。
前言:如果我们需要执行用户编写的代码,如何避免死循环?
最近我们遇到了这个问题,因为写错代码导致死循环的情况很常见,所以我们进行了一些尝试。
首先,我们需要使用iframe,这主要是出于安全考虑。我们
前言
如果我们需要执行用户写的代码,如和避免死循环?我们最近遇到了这个问题,因为写错代码很常见,所以我们进行了一下尝试。
首先我们需要使用iframe
这主要是安全考虑,我们需要一个sandbox环境来执行JavaScript,避免影响到整体。iframe的sandbox属性可以用来禁止弹窗等等,非常有用。
地址可以选择Blob url,不过blob url会持有当前web page的origin,如果用户拷贝一些乱七八糟的代码不小心执行的话,会有安全问题。所以最终决定用data URI。
iframe的执行仍然在同一个thread
iframe中执行了代码,发生死循环的时候,浏览器还是死掉了,因为iframe和parent还是在同一个thread。也就是说,我们无法在parent中进行timeout检测,因为检测代码在死循环发生时永远不会被执行。
Web Worker可行但不支持DOM API
如果是纯粹的JavaScript代码,或许用web worker可以,但是我们需要DOM API,所以Web Worker也不在考虑范围之中。
本文共计907个文字,预计阅读时间需要4分钟。
前言:如果我们需要执行用户编写的代码,如何避免死循环?
最近我们遇到了这个问题,因为写错代码导致死循环的情况很常见,所以我们进行了一些尝试。
首先,我们需要使用iframe,这主要是出于安全考虑。我们
前言
如果我们需要执行用户写的代码,如和避免死循环?我们最近遇到了这个问题,因为写错代码很常见,所以我们进行了一下尝试。
首先我们需要使用iframe
这主要是安全考虑,我们需要一个sandbox环境来执行JavaScript,避免影响到整体。iframe的sandbox属性可以用来禁止弹窗等等,非常有用。
地址可以选择Blob url,不过blob url会持有当前web page的origin,如果用户拷贝一些乱七八糟的代码不小心执行的话,会有安全问题。所以最终决定用data URI。
iframe的执行仍然在同一个thread
iframe中执行了代码,发生死循环的时候,浏览器还是死掉了,因为iframe和parent还是在同一个thread。也就是说,我们无法在parent中进行timeout检测,因为检测代码在死循环发生时永远不会被执行。
Web Worker可行但不支持DOM API
如果是纯粹的JavaScript代码,或许用web worker可以,但是我们需要DOM API,所以Web Worker也不在考虑范围之中。

