[英]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.