2015-06-01 45 views
0

對於在服務器上執行的代碼可能存在哪些不可預見的問題感到好奇。或者如果有任何非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]'); 
+0

'path'從哪裏來?此外,'return this [path]'工作 – dandavis

+0

'path'出現在客戶端的參數中。 –

+0

你確定這個[路徑]有效嗎? –

回答

1

鑑於path是一個靜態值(".e[2]")和a沒有任何惡意存取左右,並沒有什麼不安全這裏,除了它是完全沒有必要的。

但是,如果path確實來自客戶端或其他不可信任的來源,那麼將它傳遞給eval是您可以做的最糟糕的事情。它可以完成JS代碼在節點中可以完成的任何事情 - 這足以嚴重傷害你。

是的,有tons of non-eval alternatives

+0

comments表示'path'是從客戶端傳入的值,因此遠離靜態或安全。 –

+0

@ NeilSmithline:謝謝,這個問題沒有提到。更新了我的答案。 – Bergi

+0

是的,我最終用'lodash' 3.9。*的'_.get()'來完成我所需要的功能。 –