大家都知道JS中的eval()函數是BAD。JS eval安全問題
其實我使用這種方式:
eval("document.getElementById('toto').value");
在我看來,這是安全的,即使用戶在「TOTO」元素髮送惡意輸入。
您能確認嗎? (我不想讓我的應用程序中存在漏洞)。
大家都知道JS中的eval()函數是BAD。JS eval安全問題
其實我使用這種方式:
eval("document.getElementById('toto').value");
在我看來,這是安全的,即使用戶在「TOTO」元素髮送惡意輸入。
您能確認嗎? (我不想讓我的應用程序中存在漏洞)。
首先,作爲Juhana在評論中指出,這樣的:
eval("document.getElementById('toto').value");
是eval
只是一個不必要的使用,它等同於
document.getElementById('toto').value;
現在,沒有引號:
eval(document.getElementById('toto').value);
...它會評估什麼有史以來的代碼是在input
與id
「TOTO」。
假設這是你的意思:
這似乎有點奇怪執行代碼有人在鍵入一個input
,但只要你沒事帶三樣東西,這很好。這三件事是:
eval
將執行該輸入中的任何代碼。由於用戶放在那裏,賠率相當不錯,這很好(至少,這是「用戶小心」的情況)。
eval
激發了一個完整的JavaScript解析器。現在,在現代瀏覽器出現這種情況比眨眼速度更快,所以......
eval
將執行你給它的背景下,在那裏你調用它的代碼,這使得它甚至到了本地訪問在這種情況下的變量。
的「eval
是邪惡的」口頭禪涉及使用eval
不必要的,因爲人們有時會做(你看到eval("obj." + nameOfProperty)
爲例),並用它在你無法控制的內容。
如果運行該用戶的用戶不是可以填充「.toto」值的用戶,則不安全。 – techfoobar
感謝您的回覆。因此,您確認第一行代碼(我的代碼行)是安全的? (即使它是不必要的使用eval) –
@cootscharles:大聲笑是的,用引號,*完全*安全。 :-) –
這與「document.getElementById('toto').value」沒有eval有什麼不同? – JJJ
@ T.J.Crowder沒有引號,但用引號......? – JJJ
爲什麼這是安全的?人們可以執行他們想要的非常JavaScript代碼,這是使用'eval'的最不安全的方法# –