2017-04-12 77 views
0

我可以JSON.parse不受信任的數據,然後驗證其結構(例如,從字符串映射到字符串數組)?或者可以從解析JSON(例如Marshal,這對於遠程代碼執行本質上是不安全的)發生壞的事情?Ruby中`JSON.parse()`的安全性?

+0

您從根本上誤解了JSON。沒有可能的安全問題。 JSON不是代碼,你不能注入有害的值。 – meagar

+0

'JSON.parse'是安全的。 'JSON.load'不是。除非你確實需要後者的特定行爲(你不會這麼做),否則總是使用前者。 –

回答

1

JSON.parse不評估任何東西,它解析json。有什麼可以出錯的?沒有。

+0

嗯,我認爲這取決於你放在'JSON'中,例如'JSON.parse([1,2,3] .to_json)'返回一個數組。 – DepressedDaniel

+0

@DepressedDaniel:JSON只允許使用一個簡短的數據類型列表(參見[Wikipedia](https://en.wikipedia.org/wiki/JSON#Data_types.2C_syntax_and_example)),因此不可能注入花哨和危險的數據類型與JSON。 – spickermann

+1

從技術上講,'JSON.parse' *應該*不計算任何東西,但是歷史上有一些[大量的「哎呀」時刻](https://www.trendmicro.com/vinfo/us/threat-encyclopedia/vulnerability/4835 /紅寶石上導軌-JSON解析器-遠程代碼執行脆弱性)。假定它不會執行代碼通常是可以的,但是像任何軟件一樣,真的會出現令人討厭的錯誤。 – tadman