使用esprima (或其他类似工具)是否能够100%地检测一段不受信任的代码是否试图访问它运行的函数作用域之外的变量?
window.foo = 5
var func = new Function('"use strict"; console.log(foo);')
func.call(null)这将记录5,我可以防止这个在func.call(null)函数中可用,并在不受信任的代码前加上“使用严格”。
我想我也可以用esprima,甚至eslint来分析代码,并检测函数svope中不存在的变量,对吗?100%安全吗?我知道代码仍然可能会出现错误行为,例如,执行一段时间(True){},但是除了长时间运行的代码之外,它是否“范围安全”?
发布于 2018-02-12 14:24:01
我想我也可以用esprima,甚至eslint来分析代码,并检测函数作用域中不存在的变量,对吗?
是。
100%安全吗?
没关系,您请。考虑new {}.constructor.constructor("alert('evil!')")(),它不访问任何变量。
发布于 2018-02-12 14:27:53
正如Bergi所指出的,这根本不安全。如果要运行不受信任的代码,可以尝试此沙盒。
示例:
var s = new Sandbox()
s.run( '1 + 1 + " apples"', function( output ) {
// output.result == "2 apples"
})https://stackoverflow.com/questions/48748584
复制相似问题