2012-06-25 117 views
1

我正在序列化/酸洗一個對象,將其編碼爲壓縮字符串,並將其作爲參數傳遞給下一頁的URL以反序列化。我的網絡應用程序沒有數據庫;我這樣做是因爲應用程序從外部Web服務獲取數據,這些Web服務很慢。通過URL傳遞序列化對象

這是可以接受的做法嗎?這是安全風險嗎?有沒有辦法讓這個安全?

回答

1

如果您需要在視圖之間共享數據,請使用會話進行操作。這是會議的目的。會話信息默認存儲在數據庫中,但它不具有,您還可以使用文件系統,某些緩存系統(memcache,Redis等)或signed-cookies(僅限Django 1.4+)。

請參見:

0

這不是最好的選擇,因爲URL參數字段將顯示在服務器日誌中。您可能更願意使用POST方法發送數據,或者更好,創建一個基本的數據庫(如果您無法訪問其他任何內容,請使用Sqlite),並將該ID傳遞到下一個屏幕。

1

這是一個安全隱患?

如果您使用的是序列化是泡菜則是這絕對是一個問題,因爲提到的doc:從不受信任的或未經驗證的源接收

決不unpickle數據

使用一種僅用於保存安全靜態值(例如JSON)的序列化形式。

您可以通過使用MAC對其進行簽名來保護髮送給客戶端的值,例如使用hmac。您可能需要考慮將其他屬性添加到MAC簽名的數據中,例如用戶名或時間戳,以防止簽名數據塊可自由互換,如果這對您嘗試實現的任何完整性構成威脅。

如果您還需要保護客戶端用戶查看和解釋的值,則除簽名外,您還需要使用加密算法(例如,AES--不是stdlib的一部分)。我仍然不會親自信任MAC簽名和加密的pickle,儘管它需要泄露服務器端的祕密才能被利用,但是您並不是真的想要一個信息泄漏漏洞升級爲任意代碼執行漏洞,這是pickle代表的。)