對於在服務器上執行的代碼可能存在哪些不可預見的問題感到好奇。或者如果有任何非eval
替代品。如果在服務器(nodeJS)上運行此JavaScript代碼,安全性或不安全性如何?
var a = {b:1, c:2, d:3, e:[1,2,3]};
(function(path) { return eval('this'+path) }).call(a, '.e[2]');
對於在服務器上執行的代碼可能存在哪些不可預見的問題感到好奇。或者如果有任何非eval
替代品。如果在服務器(nodeJS)上運行此JavaScript代碼,安全性或不安全性如何?
var a = {b:1, c:2, d:3, e:[1,2,3]};
(function(path) { return eval('this'+path) }).call(a, '.e[2]');
鑑於path
是一個靜態值(".e[2]"
)和a
沒有任何惡意存取左右,並沒有什麼不安全這裏,除了它是完全沒有必要的。
但是,如果path
確實來自客戶端或其他不可信任的來源,那麼將它傳遞給eval
是您可以做的最糟糕的事情。它可以完成JS代碼在節點中可以完成的任何事情 - 這足以嚴重傷害你。
comments表示'path'是從客戶端傳入的值,因此遠離靜態或安全。 –
@ NeilSmithline:謝謝,這個問題沒有提到。更新了我的答案。 – Bergi
是的,我最終用'lodash' 3.9。*的'_.get()'來完成我所需要的功能。 –
'path'從哪裏來?此外,'return this [path]'工作 – dandavis
'path'出現在客戶端的參數中。 –
你確定這個[路徑]有效嗎? –