2011-06-02 130 views
0

我需要幫助在python程序中存儲數據。我不希望用戶能夠觸摸數據。我看着泡菜,但很多帖子都說它「不安全」。在python中存儲數據

+0

你看過Cerealizer嗎? http://home.gna.org/oomadness/en/cerealizer/index.html – 2011-06-02 21:32:17

+0

你的意思是「觸摸數據」?你在談論惡意用戶嗎?只要你把你的程序給別人,他們**就能夠發現它是如何工作的以及如何擺弄這些數據。其他一切只是儘可能減慢它們的一個問題。您是否在尋找關於如何減緩惡意用戶的建議? – jwd 2011-06-02 22:23:32

+0

這與防篡改餅乾的概念基本相同。我會開始瞭解這些。 – Triptych 2011-06-03 11:50:41

回答

0

你作爲內平均內存中,而不是在磁盤上?將數據存儲在內存中並使整個程序易於訪問的一個非常簡單的解決方案是在程序的根目錄中創建一個包含字典的python文件。

例如,PY/storage.py將包含:

data = {} 

然後,你可以寫它,像這樣:

import storage 
storage.data['foo'] = 'bar' 

,然後在這樣的另一個文件讀取相同的價值:

import storage 
foo = storage.data['foo'] 

在存儲模塊中的數據將是在程序中的所有其它模塊可訪問的,而將當程序退出時被刪除。如果不修改程序,用戶將無法觸摸它。如果你需要更多的數據庫相關的東西,sqlite允許你在內存中創建數據庫,只要程序正在運行,只留在內存中

+0

我不希望用戶能夠訪問數據,而且,我要將該程序轉換爲.exe。 – mike 2011-06-02 22:01:25

3

你不能停止用戶觸摸數據。如果他們正在他們的系統上運行一個程序,他們可以在寫入磁盤之後用它們做任何他們想做的事情。您可以以各種方式混淆數據,甚至可能對其進行加密,但如果確定它們,它們仍然可以最終實現。如果您需要證明,請查看每個發明的每個版權保護/ DRM系統的絕對故障。有些解決方案「足夠好」,但不知道你實際想要解決什麼問題,沒有好的方法來開始提供切合實際的選擇。

...和皮克爾很好,如果你可以信任你的數據。如果您可以合理確定您的程序將文件寫入磁盤,並且惡意程序沒有主動針對您的應用程序,那麼這是安全的。我永遠不會相信通過網絡發送的一個pickle,然而 - 一個pickle可能會在反序列化過程中執行任意命令。

0

快速瀏覽thisthis。那些圖書館可能會有所幫助。我不得不指出,一個經驗豐富的計算機軟件工程師可能會找到一種方法,通過簡單地閱讀源文件,解構編譯代碼,甚至可能是一個可行的暴力解密來繞過任何實施的隱藏數據的方法(我可能錯誤)。

1

如果用戶將在他的機器上運行您的程序,您將無法隱藏數據。

運行該程序的用戶可以訪問程序可以訪問的所有內容,只是知道去哪裏看的問題。

如果您正在與最終用戶打交道,那麼只需在最後一點對數據進行加密和解密,然後再使用它。請記住,在某些時候,數據必須在內存中解密,然後用戶才能看到它。

2

可以嘗試停止程序運行,如果它已被篡改,例如通過比較其(md5)哈希值與已知的良好值。查看Chrome OS項目,瞭解一個系統的例子。

可以試圖阻止用戶瞭解您的程序和寫入磁盤的數據,例如通過加密並隱藏解密子例程或通過混淆源代碼。

但是,您無法阻止已確定的用戶銷燬您的程序及其數據或中斷它。一旦你的程序處於空中,我認爲它的內存段受到其他進程的訪問保護。儘管如此,這並不能阻止用戶進行反編譯,並在運行之前試圖理解您的程序。

安全旨在保護軟件不受其所有者的威脅,必然要依賴聰明的黑客。請記住,你的聰明黑客受到其他聰明黑客的規避。 Python被設計成一種開放的語言,所以如果你打算設計「鬼鬼祟祟」的程序,你可能會對其他語言有更好的運氣。

0

如果您需要保護數據免遭篡改(但您並不擔心有人看到數據),那麼使用自定義加載程序部署您的項目是諸如signet(http://jamercee.github.io/signet/)之類的方式。把你的數據blob放在你的腳本中,並且它的值將被合併到它的sha1計算中。如果有人要修改數據blob,加載器會將其檢測爲篡改,並拒絕運行它。