首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Esprima检测全局范围访问

Esprima检测全局范围访问
EN

Stack Overflow用户
提问于 2018-02-12 14:20:12
回答 2查看 153关注 0票数 1

使用esprima (或其他类似工具)是否能够100%地检测一段不受信任的代码是否试图访问它运行的函数作用域之外的变量?

代码语言:javascript
复制
window.foo = 5
var func = new Function('"use strict"; console.log(foo);')
func.call(null)

这将记录5,我可以防止这个在func.call(null)函数中可用,并在不受信任的代码前加上“使用严格”。

我想我也可以用esprima,甚至eslint来分析代码,并检测函数svope中不存在的变量,对吗?100%安全吗?我知道代码仍然可能会出现错误行为,例如,执行一段时间(True){},但是除了长时间运行的代码之外,它是否“范围安全”?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-12 14:24:01

我想我也可以用esprima,甚至eslint来分析代码,并检测函数作用域中不存在的变量,对吗?

是。

100%安全吗?

没关系,您请。考虑new {}.constructor.constructor("alert('evil!')")(),它不访问任何变量。

票数 3
EN

Stack Overflow用户

发布于 2018-02-12 14:27:53

正如Bergi所指出的,这根本不安全。如果要运行不受信任的代码,可以尝试此沙盒

示例:

代码语言:javascript
复制
var s = new Sandbox()
s.run( '1 + 1 + " apples"', function( output ) {
  // output.result == "2 apples"
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48748584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档