在Java中,我發現直接獲取字符串並將其用作LinkedHashMap
中的鍵。我甚至可以將它翻譯成JSON並返回而不會產生任何麻煩。JavaScript對象與地圖 - 如何處理特殊鍵?
我現在在使用Node.JS/JavaScript,並且有一個特殊情況沒有處理。
var makesSense = '{"__proto__":"foo","toString":"bar"}'
var noSense = JSON.stringify(JSON.parse('{"__proto__":"foo","toString":"bar"}'))
console.log(noSense) // outputs {"toString":"bar"}
什麼是推薦的方式來處理__proto__
和其他類似的東西。看起來toString
不會造成任何麻煩,但假設我需要一致處理不可信數據。什麼是推薦的解決方案?
- 在每個鍵之前加上一個額外的字符?如果是這樣,哪個角色最有意義?我知道它不能是一個下劃線,那麼空間呢?
- 使用一個模塊爲我處理這個?我想要一個能夠方便處理並且沒有過多特徵的應用程序。 (有些功能雖然不錯)
- 還有其他的東西嗎?有沒有與
JSON.parse
兼容的解決方案?
爲什麼這很重要?當然,沒有人真的打算輸入__proto__
。但如果他們故意這樣做,會怎麼樣?他們學習我使用JavaScript,那又怎麼樣? - 除以下情況外沒有問題:
- 軟件有一串字符串。它恰好發生這些字符串中的一個說
__proto__
,因爲有人在試圖破壞我的軟件。 - 軟件使用這些字符串爲一個鍵創建一個Map,並用一些很好的數據填充Map。
- 軟件稍後會瀏覽字符串數組,並從地圖收集信息。該映射返回空值,然後繁榮:空指針異常。
- 軟件現在不起作用。這將有資格成爲拒絕服務之類的事情。
我知道那種情況絕對不一樣,但我不喜歡它。我不記得我使用的編程語言的所有怪癖,所以給了足夠的時間,我一定會寫這種類型的代碼。
我爲創建不受篡改的代碼感到自豪。所以,我試圖從我的軟件中消除這些針孔。
是的,這些都是超小的,但它至少值得一個StackOverflow的問題,看看人們是否有比我知道的更好的答案。我通過這種方式瞭解了很多。
您試圖解決的實際問題是什麼?看起來**對我來說真的不太可能,因爲你有一個真實世界的情況,你需要使用'__proto__'和'toString'等鍵來獲取JSON。 –
順便說一句,上面的代碼片段在Opera中有正確的輸出。 – Bergi
@ T.J.Crowder,看我的編輯。 –