2013-03-30 182 views
1

在python3 pickle模塊的文檔,它說:取儲存危險

「 pickle模塊並不旨在是對錯誤或惡意構造數據的安全來自不可信或未經認證的源接收決不unpickle數據」

從不受信任的來源中取出數據的風險是什麼?取消不受信任的數據本身是否危險?或者,使用未焊接的對象只是危險的?那麼解開不可信數據然後(在對結果對象做任何事情之前)證明它是一個保存對象是安全的嗎?

回答

2

Pickle通過查找可調用對象(通常是類,但實際上是可調用的)並用固定參數調用它們來重新創建對象。這意味着拆除可能運行任何可召回任何地方,與任何論點。即使相關模塊尚未導入,pickle也很樂意導入它。例如,它只需要幾十個字符到execute os.system。所以,你甚至在你還沒有收到對象之前就搞砸了

2

取消pickle等於執行任意代碼。攻擊者可以創建一個pickle,它將在取出過程中執行系統命令。

下面是一個例子,從a good blog post on the topic

此明確指出,泡菜是不安全的。許多人認爲這是因爲它可以加載除期望以外的類,並可能欺騙你運行它們的功能。但實際的安全風險要更危險。 Unpickling可以被利用來執行你的機器上的任意命令!

+1

@nadiaAlramli那個帖子還在什麼地方?該博文很好,但鏈接直接跳轉到您的鏈接頁面 – tacaswell

1

pickle格式使用全面的虛擬機。如果饋入機器的代碼是由攻擊者控制的,那麼它可以遠遠超出對象序列化(包括執行任意OS命令)。

有關討論,請參閱Why Python Pickle is Insecure

+0

鏈接已死 –