如果在服务器上执行此类代码可能出现的无法预料的问题,那就很好奇。或者,如果有任何非eval
替代品。
var a = {b:1, c:2, d:3, e:[1,2,3]};
(function(path) { return eval('this'+path) }).call(a, '.e[2]');
答案 0 :(得分:1)
鉴于path
是一个静态值(".e[2]"
)而a
没有任何恶意访问者,所以这里没有任何不安全因素,除非它完全没必要。
但是,如果path
确实来自客户端或其他不受信任的来源,那么将其传递给eval
是您可以做的最糟糕的事情。它可以完成JS代码在节点中可以做的所有事情 - 这足以严重伤害你。