簡體   English   中英

JSON.parse與eval()

[英]JSON.parse vs. eval()

我的Spider Sense警告我,使用eval()解析傳入的JSON是一個壞主意。 我只是想知道JSON.parse() (我認為是JavaScript的一部分而不是瀏覽器特定的功能)是否更安全。

如果使用eval您更容易受到攻擊 :JSON是Javascript和json的子集。parse僅解析JSON,而eval則為所有JS表達式敞開了大門。

所有JSON.parse實現JSON.parse可能使用eval()

JSON.parse基於Douglas Crockford的解決方案 ,該解決方案第497行使用eval()

// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.

j = eval('(' + text + ')');

JSON.parse的優點是它可以驗證參數是否為正確的JSON語法。

並非所有瀏覽器都具有本機JSON支持,因此有時您需要對JSON字符串使用eval() 使用來自http://json.org的 JSON解析器,因為它可以為您輕松處理所有事情。

Eval()是一個邪惡的行為,但是對某些瀏覽器來說卻是一個必不可少的邪惡行為,但在可以避免的地方,請這樣做!!!

JSON.parse()和eval()接受的內容有所不同。 嘗試評估:

var x =“ {\\” shoppingCartName \\“:\\” shopping_cart:2000 \\“}”

eval(x)         //won't work
JSON.parse(x)   //does work

請參閱此示例

如果使用eval解析JSON,則允許所解析的字符串包含絕對的任何內容,因此,您不僅可以發現自己執行的是函數調用,還可以執行其他操作,而不僅僅是一組數據。

此外,JSON的parse接受一個aditional的參數,齊磊,讓您指定如何(更多信息和示例在線文檔處理某些價值觀,如日期時間在這里

JSON只是JavaScript的一個子集。 但是eval評估完整的JavaScript語言,而不只是JSON子集。

暫無
暫無

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

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