簡體   English   中英

用於處理responseText的eval和window.json.parse之間的區別?

[英]Difference between eval and window.json.parse for a dealing with a responseText?

我手邊有以下代碼

var finalCompleteData = eval(“(”+“jsonresponse.responseText +”)“);

當我使用它時,我在Fortify中收到一個安全漏洞錯誤,說它可能導致Javascript Hacking。 所以,我把它改成了

var finalCompleteData = window.json.parse(jsonresponse.responseText);

為此,Fortify沒有顯示錯誤。 window.json.parse方法有什么作用?

你能解釋一下嗎? 提前致謝 :-)

eval將執行它應該評估的任何JavaScript代碼,並以最高級別的安全性進行評估。 這意味着如果您的響應文本返回非json代碼,但是有效的javascript,則eval將執行它。 天空是這個的極限,它可以添加新功能,更改變量,重定向頁面。

使用window.json.parse只會評估json,因此輸入流氓代碼的風險要小得多。

eval能夠運行任何類型的javascript代碼 - 不僅僅是JSON.parse所需的簡單對象/數組(它會檢查內容 - 驗證json)。 因此,在無法保證輸入的地方應避免使用eval。

正如其他人所提到的, eval將執行任何有效的JavaScript代碼。 因此,以下將導致警報:

var jsObject = eval("alert('blah')");

您基本上信任來​​自給定來源的任何輸入,這通常是不安全的。 惡意用戶可以利用eval並執行有害的JavaScript。

但是,如果傳入的字符串是有效的JSON, JSON.parse只會成功返回:

// gives "SyntaxError: JSON.parse"
var jsObject = JSON.parse("alert('blah')");

因此,它不會執行任何以eval方式給出的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM