2013-03-29 64 views
1

大家都知道JS中的eval()函數是BAD。JS eval安全問題

其實我使用這種方式:

eval("document.getElementById('toto').value"); 

在我看來,這是安全的,即使用戶在「TOTO」元素髮送惡意輸入。

您能確認嗎? (我不想讓我的應用程序中存在漏洞)。

+3

這與「document.getElementById('toto').value」沒有eval有什麼不同? – JJJ

+1

@ T.J.Crowder沒有引號,但用引號......? – JJJ

+0

爲什麼這是安全的?人們可以執行他們想要的非常JavaScript代碼,這是使用'eval'的最不安全的方法# –

回答

2

首先,作爲Juhana在評論中指出,這樣的:

eval("document.getElementById('toto').value"); 

eval只是一個不必要的使用,它等同於

document.getElementById('toto').value; 

現在,沒有引號:

eval(document.getElementById('toto').value); 

...它會評估什麼有史以來的代碼是在inputid「TOTO」。

假設這是你的意思:

這似乎有點奇怪執行代碼有人在鍵入一個input,但只要你沒事帶三樣東西,這很好。這三件事是:

  1. eval將執行該輸入中的任何代碼。由於用戶放在那裏,賠率相當不錯,這很好(至少,這是「用戶小心」的情況)。

  2. eval激發了一個完整的JavaScript解析器。現在,在現代瀏覽器出現這種情況比眨眼速度更快,所以......

  3. eval將執行你給它的背景下,在那裏你調用它的代碼,這使得它甚至到了本地訪問在這種情況下的變量。

的「eval是邪惡的」口頭禪涉及使用eval不必要的,因爲人們有時會做(你看到eval("obj." + nameOfProperty)爲例),並用它在你無法控制的內容。

+1

如果運行該用戶的用戶不是可以填充「.toto」值的用戶,則不安全。 – techfoobar

+0

感謝您的回覆。因此,您確認第一行代碼(我的代碼行)是安全的? (即使它是不必要的使用eval) –

+1

@cootscharles:大聲笑是的,用引號,*完全*安全。 :-) –