TLDR:將$ _POST數組序列化爲文件並將其讀回到另一個請求或不同腳本的$ _POST變量中是否安全?
我意識到這是不尋常的。這是有原因的,並且需要十幾頁文字來解釋爲什麼我正在考慮在特殊情況下做這件事,至少在此期間。
歸結過程:
file_put_contents('sample.post', serialize($_POST));
$_POST = unserialize(file_get_contents('sample.post'));
我已經爲可變後的實際內容中所廣泛篩選。我的問題是序列化和反序列化整個$ _POST數組的過程是否給惡意用戶一種攻擊方法。如果你的代碼不能在unserialize()中傳遞,那麼反序列化可能會導致代碼被加載並執行,這是由於對象的實例化和自動加載,而惡意用戶可能會利用它。
我發現這些文章描述這種攻擊方法。但它們似乎取決於用戶能夠指定要直接反序列化的字符串,IE反序列化($ _ POST ['value'])。
https://www.notsosecure.com/remote-code-execution-via-php-unserialize/ https://heine.familiedeelstra.com/security/unserialize
我是正確,只要我序列化和反序列化,對象不能在反序列化過程中產生的,對不對?
我的印象是$ _POST數組只會包含字符串(雖然我無法找到在PHP文件,明確提到的)下。
據我所知,即使有人提供一個字符串匹配的序列化對象的格式,將「存儲」作爲序列化過程中的字符串,具有顯式長度(字節長度)。所以它只會在反序列化時被指定爲一個字符串。這似乎是因爲在序列化過程中字符串的長度與它們一起存儲,所以不能像使用SQL注入一樣從輸入中破壞序列化字符串的結構。我試圖用一些無效的多字節字符來欺騙它,但沒有運氣。但是,我無法做到這一點,經驗豐富的黑客能夠做到這一點是兩件不同的事情。
我無法找到任何關於其他攻擊方法。
請讓我知道如果我失去了一些東西!我剛剛讀了幾條評論,說'你永遠不應該這樣做',所以我很緊張,我誤解了一些東西。
看起來像你有你的基地覆蓋 – 2016-11-20 04:36:59