簡體   English   中英

JSON.parse 的 Node.js 實現

[英]Node.js Implementation of JSON.parse

我需要從不受信任的 json 中獲取 javascript 對象。

最初它以字符串形式出現,有兩種方法可以完成任務: eval()JSON.parse()

我在哪里可以看到JSON.parse Node.js 實現,因為我擔心它在JSON.parse使用 eval 並且可能存在安全漏洞。

我試圖檢查v8庫,甚至在 Firefox 中嘗試過Function.prototype.toSource() - 沒有結果。

任何人都可以向我提供一些我不應該擔心使用它的證據嗎?

V8 開發人員在這里。 JSON.parse並沒有在JSON.parse使用eval —— 這正是擁有JSON.parse ,以及為什么強烈建議使用它(而不是eval )來解析 JSON 數據。

正如feeela已經指出的那樣,如果你想自己驗證這一點,請查看源: https : //github.com/v8/v8/blob/master/src/json-parser.cc

或者運行一個實驗:

var bad_json_data = 'console.log("executed!"); "{foo:1}"';
var o1 = eval(bad_json_data);  // Prints to console.
var o2 = JSON.parse(bad_json_data);  // SyntaxError!

也就是說,您必須始終小心不受信任的輸入。 使用JSON.parse將 JSON 字符串轉換為對象是安全的,但之后您仍然必須小心使用該對象的目的(作為一個隨機示例,如果您嘗試,其屬性值仍然可能允許 SQL 注入攻擊)將它們存儲在數據庫中)。

您不能將函數/類解析為 JSON。 如果有函數,它們將被表示為字符串。 如果您嘗試,您可以檢查:

 const obj = { a: () => console.log("test") } console.log(JSON.stringify(obj)) // prints {}

暫無
暫無

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

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