2013-09-24 122 views
1

我需要將結構化數據存儲在cookie中。
某些目錄頁面的最愛。數據是{ {id,type} , {id,type} , ... }
在我的代碼我需要把它放回到一個數組。所以我使用unserialize()函數來恢復數據。
有沒有辦法來防止對象注入?反序列化函數的任何替代方法?如何避免cookie的對象注入?

+1

你確定cookie是存放這個的地方嗎? (提示:可能不是) – 2013-09-24 22:24:28

回答

1

有沒有一種方法,以防止物體注入

當你反序列化對象時,PHP會調用這個類的定義__wakeup方法(這不是存儲在cookie中,但在你的PHP類文件在服務器上)。

有沒有可能有人更改序列化對象的類和猜測正確造成__wakeup函數來執行某些任務嗎?是。通常__wakeup函數將簡單地重新連接到一個資源,所以這可能會或可能不是一個大問題,但爲什麼會冒這個風險呢?只需將數組存儲爲JSON並使用json_encode($yourdata)並將其返回即可json_decode($cookiedata, true)

只要存儲在客戶端的數據不會構成安全風險(即顯示敏感信息),就沒有問題。存儲用戶的收藏夾可能適合於此,特別是如果它是一個高流量站點,並且您不想爲此類型的數據執行數據庫提取或長時間會話。

+0

謝謝。由於某種原因,我沒有想過使用json_decode: - ? – yossi

0

我正在考慮將cookie信息進行加密,以防止用戶知道到底是他/她編輯

1

好吧,如果你有一個定義的數組你應該如何結構的方式看,然後只要確保你反序列化的字符串真的是一個數組,當你迭代它時,只需檢查值類型(id - > int,type - > string)。另外,我認爲json_encode在你的數據情況下會更好,它的體積更小,解碼更快(並且你可以在客戶端使用它)。

+1

這一切都不停止用戶編輯餅乾 – 2013-09-24 22:35:13

+1

沒有與任何的cookie搞亂停止客戶端。如果你想確保這些數據沒有被客戶端編輯過,請保存在會話中。 –

-1

如果您不希望用戶可能修改數據,那麼不要首先將數據提供給用戶。使用$_SESSION,一個數據庫,或將信息寫入服務器上的文件。