2011-08-11 99 views
2

在Django項目中,我想保持用戶上傳的文件在服務器上的安全。這應該在操作系統級別(我們正在使用ubuntu)還是在應用程序級別上完成?Django:保護/加密存儲的文件

在應用程序級別進行加密將更容易維護。但是,除了可能對性能造成負面影響等一些弊端之外,我甚至不確定這是否有任何意義。如果黑客入侵服務器,他也可以訪問加密密鑰以及加密/解密的方式。

任何建議,非常感謝。謝謝。

回答

1

你說得對,如果用於加密文件的密鑰存儲在服務器上,則通過加密文件不會獲得大量增加的安全性。

但是,如果您使用用戶提供的密鑰,那麼您確實會獲得一些安全性。例如,如果您將加密密鑰存儲在cookie中,那麼它只會在每個請求的持續時間內可用。我不相信這會產生任何安全問題(如果攻擊者可以竊取cookie,他們也可以竊取用戶的會話),並且這會使攻擊者訪問屬於不屬於用戶的文件更加困難目前在線。

如果你真的偏執,你可以做的1Password做什麼,並且發送加密數據返回給瀏覽器,它可以用JavaScript加密例程解密...

3

您如何保護您的數據取決於什麼樣的你想防範的攻擊。當然,你可能不知道攻擊者是如何最有可能危害你的系統的,除非你有特別想要防範的威脅模型,比如說一個流氓系統管理員。

攻擊者可能訪問運行Web服務器的操作系統。在這種情況下,文件系統級別的加密可能不適合你。事實上,文件系統級別的加密可能只是有用的保護措施,防止有人利用物理服務器走出來(這是一個完全有效的威脅模型)。但是,如果使用存儲在數據庫中的密鑰對文件進行加密,那麼攻擊者可以訪問Web服務器操作系統但不訪問數據庫。

相比之下,攻擊者可能通過應用程序中的漏洞訪問數據庫,但不能訪問操作系統。我認爲這種可能性較小,因爲現代操作系統提供了巨大且經過充分研究的攻擊面。

爲了保護用戶的數據免受攻擊者的攻擊而完全訪問您的服務器非常困難。您需要使用服務器沒有的密鑰加密數據。這可能類似於密碼或用戶cookie中存儲的密鑰。所有這些方案的問題在於用戶不能信任像這樣的關鍵數據 - 他們總是希望在忘記密碼時重置密碼。在大多數情況下,保護數據免受攻擊者的攻擊,並且完全訪問您的操作系統和數據庫是不現實的。

所以我會選擇你想要保護的東西。就我個人而言,我希望操作系統滲透最有可能,並且因此使用隱藏在數據庫的一部分中的密鑰來加密文件,該數據庫以某種方式受到額外保護。這裏面臨的挑戰是操作系統必須存儲數據庫登錄憑證(在settings.py中)以便網絡應用程序正常運行。因此,儘可能在儘可能少的用戶帳戶上儘可能限制這些文件在操作系統內,即chmod 600