2013-06-22 47 views
2

數據我有8 input type text. name=favour_01序列化是危險的PDO

我讓那些8 inputarrayserialize

我使用PDO將其保存到數據庫。

比反序列化它的輸出

$favour[]='apple'; $favour[]='banana'; 

$favours = serialize($favours); 

prepare(... 

$food->bindValue(':favours', $favours, PDO::PARAM_STR); 

這是安全的?我已閱讀序列化輸入是脆弱的。

我沒有使用任何類此,這裏是一個後我已閱讀https://www.owasp.org/index.php/PHP_Object_Injection

+0

我認爲這不是危險*,但我確實認爲你沒有掌握好數據庫設計可能的樣子...... – lonesomeday

+0

我的表中有一列包含30多列,因此我嘗試將這些列組輸入到一個數組 – user2178521

+0

嗯,加入?關係數據庫? – lonesomeday

回答

2

序列化的數據只有當你序列化數據包含敏感信息的安全風險。例如,您可能會序列化包含密碼的數據,然後將序列化表單存儲在不安全的地方。

反序列化如果您嘗試反序列化您從不可信來源獲得的數據,則數據存在安全風險。非序列化過程可以實例化對象,因此數據輸入可能會做你不能預料的事情。

從安全的角度來看,對於序列化一個簡單的值數組以綁定到SQL參數所做的操作是可以的,但請記住,您無法有效地搜索數據庫以查找特定值在該序列化數組中。基本上你的數據庫變成了一個黑盒子:你可以將一個完整的數組填入數據庫中,並將整個數組取出來反序列化,但是你不能用SQL輕鬆讀取或寫入數組的各個元素。

最好的做法是創建一個子表並在該表中存儲每行一個元素。

+0

thx u非常適合回答,適當。我有其他的cookie使用序列化從我以前的問題.http://stackoverflow.com/questions/17252769/how-to-set-new-array-if-unserialize-string-changed-by-user,但我不知道這一個確定與否,我只學習OOP一次,從來沒有使用它,當輸出到瀏覽器使用[htmlspecialchars]時,大聲笑 – user2178521

2

是的,如果您使用預處理語句,然後在從數據庫中檢索數據之後驗證數據,然後再輸出到瀏覽器,則是安全的。

+0

(http://www.php.net/manual/en/function.htmlspecialchars.php )或[htmlentities](http://php.net/manual/en/function.htmlentities.php) – amigura