2013-05-29 29 views
-1

情況隱藏明文文件(蟒Tkinter的)

只要在應用程序啓動,我解密所有存儲的數據(這是使用ARC4加密),並將其存儲在文件中。現在應用程序全屏運行,但是如果用戶最小化這個窗口並在他的文件管理器(nemo,explorer等)中查看,那麼他/她將看到一個純文本文件。這將導致所有數據被泄露,顯然我不希望這種情況發生。一旦應用程序關閉,然後我使用os.remove加密數據並刪除明文文件,並僅存儲加密的數據。正在運行的應用程序正是我擔心的時候。存儲的數據是賬戶信息(用戶名,密碼等)。

問題

那麼,有沒有辦法以某種方式掩蓋這個純文本文件,使用戶無法看到它在自己的文件管理器,但我可以從程序訪問它?

障礙:(

,因爲我反對的最後期限運行,我不能改變程序的整體設計,這是一個大的應用程序,並會簡單地花太多時間。幫助我這個問題。

規格

我是一個Linux Mint的機器上使用Python 2.7。

+2

未加密地寫入硬盤驅動器已經在某種程度上損害了數據。有可能會像處理另一個用戶帳戶中的數據(如果當前用戶不是該機器的管理員) –

+1

您不應該在第一時間存儲密碼(即使是加密的)!而Python(當在本地運行時)對於安全相關的應用程序來說並不是一個好的解決方案,因爲用戶總是可以訪問源代碼(或者可以微不足道地獲得它),所以你做的任何事情都可以被攻擊者複製。 –

回答

1

這是一個真的,真的,壞主意存儲敏感數據在純文本文件。只有在需要時才應該解密數據,並在程序中立即使用它,而不必將其寫入文件。

但是,假設你已經知道這一點,你只想要一個快速修復隱藏文件,那麼你可以:

  • 使文件名開始與. - 例如.data。這將使該文件隱藏在基於Unix的系統上。
  • 放置在一個不起眼的位置,用戶不太可能搜索的文件,如/tmp
  • 不要給文件一個明顯的名稱,如passwords.txt,而是從一個哈希函數或時間戳使用生成的名稱 - 如time.time()。這樣每次運行程序時都會使您的文件名有所不同。
  • 你可以從文件中刪除讀取權限與os.chmod(file, '022')
  • 刪除該文件的程序關閉時,與os.remove(file)

有辦法繞過這些防禦(甚至刪除文件),他們只會讓用戶更難讀取數據。這根本不是真正的保護,依靠這樣的技術來保護真實數據絕對不是一個好主意。

+0

是@Jamie。我知道這不是正確的做法。但正如我所說,我在最後期限之前跑步,第一次犯了一個錯誤!感謝您指出了這一點! – IcyFlame

1

理想情況下,您可以根據需要解密數據,然後使用它,然後在不需要將其寫入磁盤時就立即將其從內存中清除。如果設計變更太多了,而且對於非技術用戶來說,訪問所有敏感信息有困難,那麼將其存儲在內存中並接受任何關心的人都可以訪問它。

如果做不到這一點,爲了一些其他的選擇,從容易更難訪問數據:

  • 可以隱藏文件,但如果用戶打開顯示隱藏文件或 使用ls -l他們可以看到它。
  • 您可以讀取保護文件,但用戶可以更改文件的權限以讀取文件。
  • 您可以在使用它後直接刪除文件,但用戶可以使用數據恢復工具讀取文件(或者在程序使用時只讀取它)。
  • 您可以將文件發送到遠程服務器,並從那裏讀取它 而解密數據不會觸及用戶的驅動器,但如果他們使用數據包嗅探器,他們可以讀取數據。
  • 您可以將其保存在內存中,但如果操作系統將其分頁或用戶檢查程序存儲器,則它們可以讀取數據。
+1

通過互聯網發送敏感的未確認數據將提供更多的安全問題,而不僅僅是將數據保存在用戶的機器上!這會使系統容易受到外部世界的影響,並可能允許任何人訪問數據並危害系統。 – Jamie

+0

確實。這個選項在實現某種安全的API時非常有意義,它通過HTTPS提供所需的明文。 – Sysyphus

1

稍微更安全的方法是使用內存映射文件而不是磁盤文件。如果加密數據的大小不是幾百兆字節,那麼您可以在內存中創建文件而不用接觸磁盤。看看StringIO模塊。當然,這不是100%安全的,因爲有辦法查看RAM中存儲的內容,操作系統可以將數據分頁到基於HDD的分頁文件,但它仍然比純文本「保護」好幾個數量級磁盤上的文本物理文件。