如果數據庫被破壞和下載,是否對使用者密碼進行雜湊處理是否重要?
我目前正在盡可能多地在 Web 應用程序中實現安全性,但我不能停止考慮數據庫本身。對於我實施的所有安全措施,例如使用者表中的加鹽和散列密碼,如果黑客設法完全下載數據庫(例如通過訪問伺服器),他們將能夠看到整個數據庫中的所有數據數據庫?
在過去的幾年裡,我一直在閱讀所有知名品牌的數據庫洩露事件,這些數據庫在暗網上出售。
我知道散列密碼會減慢/阻止黑客訪問純文字登錄憑據,這可能與使用者註冊的其他網站相同,但我的問題是,儲存在數據庫中的個人資訊不是散列。比如你在過去幾年購買了哪些產品,或者你的工作經歷,或者你的聯繫方式,或者一些真正令人尷尬的事情,比如你訪問過和/或收藏過哪些成人網站。
考慮到如果使用者的電子郵件地址被用作登錄憑據的一部分,則您無法對其進行雜湊處理,因此某些黑客可能會使用使用者 ID 查詢數據庫,從其他表中獲取個人資訊,然後向該使用者發送勒索電子郵件。
我能想到的兩個潛在解決方案是:
- 盡可能多地加密數據庫中的資訊 - 但不能全部加密,否則我們將無法對我們的使用者群執行快速洞察查詢。
- 在伺服器上加密實際的數據庫文件本身,因此如果下載它,他們將無法在不知道密鑰的情況下訪問。
所以,1 並不是一個很好的解決方案,因為我無法加密所有內容。如果伺服器上的根文件是加密文件,那麼 2 是否真的可以工作,例如使用 django 的 Web 應用程序是否能夠寫入數據庫?我知道 MS SQL Server 具有始終加密的功能,但我使用的是 MySQL。
很抱歉這個問題太長了——我腦子裡充滿了各種各樣的可能性,這讓我發瘋了!
謝謝!
這裡有兩個概念:
- 靜態數據
- 動態數據
靜態數據
正如您正確指出的那樣,如果有人可以訪問您的數據庫並且數據本身沒有加密,那麼散列和加鹽密碼沒有任何區別。
- 在伺服器上加密實際的數據庫文件本身,因此如果下載它,他們將無法在不知道密鑰的情況下訪問。
您應該以某種方式或形式啟用磁碟加密。SQL Server 提供透明數據加密 (TDE),一旦數據離開記憶體並保存到儲存中,就會對其進行加密。這稱為“靜態加密”。
此功能在您的 RDBMS 中可能不可用,因此您可能依賴儲存供應商的磁碟加密。否則,您可以調查文件系統級別的加密。
重要的是讓數據庫管理員遠離加密密鑰,並確保在處理數據庫備份時與數據庫伺服器具有相同的安全考慮。
動態數據
至於您關於有權訪問加密數據的應用程序的問題,處理方式不同。我將再次回到 SQL Server,因為這就是我所知道的。
- 盡可能多地加密數據庫中的資訊 - 但不能全部加密,否則我們將無法對我們的使用者群執行快速洞察查詢。
應用程序使用證書連接到伺服器,因此只有它可以看到它有權訪問的數據。它被稱為始終加密,除非有人擁有該證書,否則數據將無法訪問。
您最終使用的數據庫伺服器應該考慮這兩個概念。這是SQL Server 的文件,但其他更成熟的玩家應該具有類似的功能。
簡單的密碼是可以破解的。閱讀“字典密碼破解”。黑客擁有它們——他們在你的系統中獲取密碼,查找它們,瞧,這就是明文。這就是為什麼每個人都告誡你使用大小寫、數字和標點符號的原因。並且 >= 8 個字元。處理這麼多可能性的“字典”是不切實際的。