Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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 Esprima检测全局范围访问_Javascript_Security - Fatal编程技术网

Javascript Esprima检测全局范围访问

Javascript Esprima检测全局范围访问,javascript,security,Javascript,Security,使用esprima(或其他类似工具)是否可以100%检测一段不受信任的代码是否试图访问其运行的函数范围之外的变量 window.foo = 5 var func = new Function('"use strict"; console.log(foo);') func.call(null) 这将记录5。我可以通过func.call(null)和对不受信任的代码预先加上“use strict”来防止函数中出现这个 我假设我也可以用esprima甚至eslint分析代码,并检测func svop

使用esprima(或其他类似工具)是否可以100%检测一段不受信任的代码是否试图访问其运行的函数范围之外的变量

window.foo = 5
var func = new Function('"use strict"; console.log(foo);')
func.call(null)
这将记录5。我可以通过func.call(null)和对不受信任的代码预先加上“use strict”来防止函数中出现这个

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

我假设我也可以用esprima,甚至eslint分析代码,并检测func作用域中不存在的变量,对吗

它100%安全吗


不,一点也不。考虑<代码>新建{}。构造函数。构造函数(“警报”(“邪恶!”))()< /代码>,它不访问任何变量。

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

例如:

var s = new Sandbox()
s.run( '1 + 1 + " apples"', function( output ) {
  // output.result == "2 apples"
})

请注意,
console
也是一个“在其运行的函数范围之外的变量”。这确实是一个错误。我要强调的是,Esprima是一个解析器,它可以生成一个语法树来支持静态分析,但是静态分析不能用于确定代码一旦运行将执行什么操作。:-)我能不能也检测不到对构造函数的访问?@MartinHansen不能使用静态分析,不能。对于不受信任的代码,您需要一个完整的沙箱解决方案。