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