我需要幫助在python程序中存儲數據。我不希望用戶能夠觸摸數據。我看着泡菜,但很多帖子都說它「不安全」。在python中存儲數據
回答
也許你應該看看CouchDB?您基本上將數據存儲在JSON中作爲文檔。它完美的作品。
你作爲內平均內存中,而不是在磁盤上?將數據存儲在內存中並使整個程序易於訪問的一個非常簡單的解決方案是在程序的根目錄中創建一個包含字典的python文件。
例如,PY/storage.py將包含:
data = {}
然後,你可以寫它,像這樣:
import storage
storage.data['foo'] = 'bar'
,然後在這樣的另一個文件讀取相同的價值:
import storage
foo = storage.data['foo']
在存儲模塊中的數據將是在程序中的所有其它模塊可訪問的,而將當程序退出時被刪除。如果不修改程序,用戶將無法觸摸它。如果你需要更多的數據庫相關的東西,sqlite允許你在內存中創建數據庫,只要程序正在運行,只留在內存中
我不希望用戶能夠訪問數據,而且,我要將該程序轉換爲.exe。 – mike 2011-06-02 22:01:25
你不能停止用戶觸摸數據。如果他們正在他們的系統上運行一個程序,他們可以在寫入磁盤之後用它們做任何他們想做的事情。您可以以各種方式混淆數據,甚至可能對其進行加密,但如果確定它們,它們仍然可以最終實現。如果您需要證明,請查看每個發明的每個版權保護/ DRM系統的絕對故障。有些解決方案「足夠好」,但不知道你實際想要解決什麼問題,沒有好的方法來開始提供切合實際的選擇。
...和皮克爾很好,如果你可以信任你的數據。如果您可以合理確定您的程序將文件寫入磁盤,並且惡意程序沒有主動針對您的應用程序,那麼這是安全的。我永遠不會相信通過網絡發送的一個pickle,然而 - 一個pickle可能會在反序列化過程中執行任意命令。
如果用戶將在他的機器上運行您的程序,您將無法隱藏數據。
運行該程序的用戶可以訪問程序可以訪問的所有內容,只是知道去哪裏看的問題。
如果您正在與最終用戶打交道,那麼只需在最後一點對數據進行加密和解密,然後再使用它。請記住,在某些時候,數據必須在內存中解密,然後用戶才能看到它。
你可以嘗試停止程序運行,如果它已被篡改,例如通過比較其(md5)哈希值與已知的良好值。查看Chrome OS項目,瞭解一個系統的例子。
您可以試圖阻止用戶瞭解您的程序和寫入磁盤的數據,例如通過加密並隱藏解密子例程或通過混淆源代碼。
但是,您無法阻止已確定的用戶銷燬您的程序及其數據或中斷它。一旦你的程序處於空中,我認爲它的內存段受到其他進程的訪問保護。儘管如此,這並不能阻止用戶進行反編譯,並在運行之前試圖理解您的程序。
安全旨在保護軟件不受其所有者的威脅,必然要依賴聰明的黑客。請記住,你的聰明黑客受到其他聰明黑客的規避。 Python被設計成一種開放的語言,所以如果你打算設計「鬼鬼祟祟」的程序,你可能會對其他語言有更好的運氣。
如果您需要保護數據免遭篡改(但您並不擔心有人看到數據),那麼使用自定義加載程序部署您的項目是諸如signet(http://jamercee.github.io/signet/)之類的方式。把你的數據blob放在你的腳本中,並且它的值將被合併到它的sha1計算中。如果有人要修改數據blob,加載器會將其檢測爲篡改,並拒絕運行它。
- 1. Python:如何在Google App Engine數據存儲中存儲數組
- 2. python,在數據框中存儲字典
- 3. 在Python中存儲用戶數據
- 4. 在Python中全局存儲數據
- 5. 在python中存儲數據庫連接?
- 6. 在python中存儲json數據
- 7. 使用Flask(Python)在Google數據存儲中存儲圖像
- 8. 在Python中存儲分數
- 9. 存儲大數據python
- 10. Python存儲數據,高分
- 11. 用Python存儲數據
- 12. 存儲常量數據:python模塊與數據存儲區
- 13. Python中的簡單數據存儲
- 14. 在Python本地存儲數據
- 15. 命名Stuctured數據存儲在Python
- 16. 查詢的數據存儲在python
- 17. 數據存儲在MongoDB中
- 18. 在Ram中存儲數據
- 19. 在FirefoxOS中存儲數據
- 20. 存儲在數據類中
- 21. 在javascript中存儲數據
- 22. 在SQLite中存儲數據
- 23. 在MySQL中存儲數據
- 24. 在IndexedDB中存儲數據
- 25. 在iPhone中存儲數據
- 26. PowerCLI - 在數據存儲中查找數據存儲
- 27. Google App Engine在python中的數據存儲中存儲大字符串
- 28. 將數據存儲在數據庫中
- 29. 在android數據庫中存儲數據
- 30. 不在數據庫中存儲數據
你看過Cerealizer嗎? http://home.gna.org/oomadness/en/cerealizer/index.html – 2011-06-02 21:32:17
你的意思是「觸摸數據」?你在談論惡意用戶嗎?只要你把你的程序給別人,他們**就能夠發現它是如何工作的以及如何擺弄這些數據。其他一切只是儘可能減慢它們的一個問題。您是否在尋找關於如何減緩惡意用戶的建議? – jwd 2011-06-02 22:23:32
這與防篡改餅乾的概念基本相同。我會開始瞭解這些。 – Triptych 2011-06-03 11:50:41