2016-11-28 32 views
10

我最近創建了一個使用Java在我的大學項目中使用Java的密碼管理器。爲了處理數據庫,我選擇了SQLite,因爲使用MySQL或SQL服務器對於一個小型項目而言變得非常忙碌。儘管我已經完成了提交,但我想如果我可以在項目中進一步改進。防止從SQLite中的外部源數據修改

我觀察到的最大缺點是,如果有人能夠在系統中找到數據庫的位置(這太容易了),打開數據庫將非常簡單。

現在這裏有兩個問題出現了 -

  1. 用戶密碼列表將是可見的
  2. 任何人都能夠修改使用SQLite Manager中的數據。

爲了解決第一個問題,我已經使用AES加密,它工作得很好。但是,第二個問題仍然存在。

因此,在堅果外殼,我怎樣才能防止我的SQLite數據庫得到修改,除了從密碼管理器本身?

要注意的是,我的應用程序只是一個家用PC上使用的離線密碼管理器。所以,你可以相應地考慮威脅級別。此外,密碼管理器本身必須修改數據庫內容,因此分配權限應該不會阻止應用程序這樣做。

注意:我想知道是否可以使用SQLite的限制,一次只能建立一個連接來寫入數據。使用這個入侵者將無法修改它。但是,我不確定如何實施。

+1

只是'chmod'數據庫只能讀取給你。其他用戶有他們自己的帳戶,對吧? (你也應該使用密碼哈希函數對密碼進行哈希處理) –

+1

如果有人獲得了物理數據庫文件,則不會阻止他們查看數據或更改數據(對於任何基於服務器的數據庫管理系統來說也是如此 - 但它通常更難訪問數據庫服務器上的文件)。甚至連一個連接「限制」都不會阻止 - 關閉你的應用程序會導致無用的連接。 –

+0

_「我想知道是否可以使用SQLite的限制,一次只能建立一個連接。」_這是不正確的。只有一個連接可以鎖定數據庫以便一次寫入,但可以存在多個連接。 –

回答

2

限制用戶訪問

只有操作系統可以保證文件不會被擅自訪問。將數據庫放入只能由當前用戶訪問的文件夾中,併爲每個用戶分別設置一個數據庫。

加密

你已經加密的密碼,這是很好的。如果你想加密整個數據庫,你可以看看SQLite Encryption Extension

SQLite加密擴展(SEE)是允許應用程序讀取和寫入加密數據庫文件的SQLite的公共域版本的附加組件。

也看看問題SQLite with encryption/password protection

攻擊

如果有人訪問該數據庫文件實際上會發生什麼?

如果數據庫安全正確,攻擊者無法獲得普通密碼(至少在合理的時間內)。在最糟糕的情況下,密碼會被另一個密碼所取代,但除了使用錯誤的密碼並且可能會重置密碼之外,該密碼不會有任何效果。因此,最糟糕的情況是您將失去保存的密碼。

無法防止單臺機器上的數據丟失。例如硬盤有時只是停止工作,別人能偷整個PC,格式化硬盤等

備份

如果你真的想確保數據不被修改,你需要在不同的機器上保留備份,以儘量減少有人訪問所有人的可能性。例如,您可以將數據庫文件上傳到雲服務。然後您對該文件進行簽名,以便您可以查看文件是否受到損害,如果可以,則退回到其他版本。

結論

您的密碼管理器是一個離線工具不夠好。如果您想提高數據完整性,則必須將數據傳輸到其他機器。