第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在使用 JSON.parse 之前應(yīng)該如何清理不受信任的 JSON?

在使用 JSON.parse 之前應(yīng)該如何清理不受信任的 JSON?

尚方寶劍之說 2023-03-10 14:54:34
給定一個用戶提供的 JSON 字符串,我們?nèi)绾卧谶\行之前JSON.parse(untrustedString)對其進(jìn)行清理?我主要擔(dān)心的是原型污染,但我也想知道我還應(yīng)該注意什么?如果只是原型污染有風(fēng)險,那么我認(rèn)為可以通過正則表達(dá)式處理,但我懷疑還有其他問題?例如,這篇關(guān)于解析不受信任的 JSON 然后創(chuàng)建對象副本的危險的文章。:現(xiàn)在考慮發(fā)送到此端點的一些惡意 JSON 數(shù)據(jù)。{  "user": {    "__proto__": {      "admin": true    }  }} 如果發(fā)送此 JSON,JSON.parse將生成一個具有屬性的對象 __proto__。如果復(fù)制庫按上述方式工作,它將把 admin 屬性復(fù)制到 req.session.user!
查看完整描述

2 回答

?
蕭十郎

TA貢獻(xiàn)1815條經(jīng)驗 獲得超13個贊

我主要擔(dān)心的是原型污染

注意JSON.parse不會污染任何原型對象。如果 JSON 字符串有一個"__proto__"鍵,那么該鍵將像任何其他鍵一樣被創(chuàng)建,無論該 JSON 中對應(yīng)的值是什么,它最終都會作為該屬性值,而不是在原型對象 () 中Object.prototype

風(fēng)險在于您之后對該對象所做的操作。如果您執(zhí)行(深)復(fù)制,使用屬性分配 或Object.assign,那么您可能會改變原型對象。

我們?nèi)绾卧谶\行前對其進(jìn)行消毒JSON.parse(untrustedString)?...我認(rèn)為可以通過正則表達(dá)式處理

不要為此使用正則表達(dá)式。使用 的第二個參數(shù)JSON.parse

const cleaner = (key, value) => key === "__proto__" ? undefined : value;


// demo

let json = '{"user":{"__proto__":{"admin": true}}}';


console.log(JSON.parse(json));

console.log(JSON.parse(json, cleaner));


查看完整回答
反對 回復(fù) 2023-03-10
?
慕田峪9158850

TA貢獻(xiàn)1794條經(jīng)驗 獲得超7個贊

在你對它做任何事情之前,userString它只是一個字符串,并且該字符串中的任何內(nèi)容本身都不會損害系統(tǒng),除非系統(tǒng)做一些事情來允許這種損害,比如以不安全的方式處理它。

輸入JSON.parse()。

JSON.parse()只是一個格式轉(zhuǎn)換工具。它不會從數(shù)據(jù)中運行任何方法(原型污染利用依賴于它),或者實際上什至查看包含在字符串化對象本身中的數(shù)據(jù),除了它包含的結(jié)構(gòu)語法和 JavaScript 保留字,用于驗證目的(MDN polyfill例子)。與字符串相同的原則適用于此;如果您不對輸出對象做任何不安全的事情,它就不會傷害您或您的系統(tǒng)。

歸根結(jié)底,防止濫用歸結(jié)為驗證安全數(shù)據(jù)處理實踐

  • 檢查解析字符串產(chǎn)生的對象,并在嚴(yán)格的參數(shù)范圍內(nèi)驗證它,忽略原型突變。

  • 使用Object.prototype.hasOwnProperty.call()。使用 eslint(no-prototype-builtins 規(guī)則)等工具在您的代碼庫中強(qiáng)制實施這些做法。

  • 不要指望用戶發(fā)送完美、安全的數(shù)據(jù)。

您鏈接的文章中,作者提到了這個確切的想法:

...來自用戶的數(shù)據(jù)應(yīng)始終進(jìn)行過濾和清理。


查看完整回答
反對 回復(fù) 2023-03-10
  • 2 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號