簡體   English   中英

在 python 中存儲數據

[英]Storing data in python

我需要幫助在 python 程序中存儲數據。 我根本不希望用戶能夠觸摸數據。 我研究過泡菜,但很多帖子都說它“不安全”。

您無法阻止用戶觸摸數據。 如果他們在他們的系統上運行一個程序,他們可以在你將它們寫入磁盤之后對這些位做任何他們想做的事情。 您可以以各種方式混淆數據,甚至可能對其進行加密,但如果他們下定決心,他們仍然可以最終得到它。 如果您想要證明,請查看曾經發明的每個復制保護/DRM 系統的絕對失敗。 有一些“足夠好”的解決方案,但是,在不知道您實際嘗試解決什么問題的情況下,沒有好的方法可以開始提供現實的選擇。

...如果您可以信任您的數據,Pickle 就很棒。 如果您可以合理地確定您的程序將文件寫入磁盤並且惡意程序沒有主動針對您的應用程序,那么它是安全的。 但是,我永遠不會相信通過網絡發送的泡菜——泡菜可能會在反序列化期間執行任意命令。

如果程序被篡改,您可以嘗試阻止程序運行,例如通過將其 (md5) hash 與已知的良好值進行比較。 查看 Chrome OS 項目以獲取大致執行此操作的系統示例。

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

但是您無法阻止堅定的用戶破壞您的程序及其數據或中斷它。 一旦你的程序運行起來,我認為它的 memory 段受到保護,不會被其他進程訪問。 不過,這並不能阻止用戶在運行程序之前反編譯並嘗試理解您的程序。

旨在保護軟件免受其所有者侵害的安全性必然依賴於巧妙的黑客攻擊。 請記住,您的聰明黑客會受到其他聰明黑客的規避。 Python 被設計為一種開放語言,因此如果您打算設計“偷偷摸摸”的程序,那么使用其他語言可能會更好。

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

運行程序的用戶可以訪問程序可以訪問的所有內容,只需知道在哪里查看即可。

如果您正在與最終用戶打交道,那么只需在使用它之前的最后一點加密數據並解密它。 請記住,在某些時候,必須在 memory 上解密數據,然后用戶才能看到它。

If you need to protect the data from tampering (but you are not worried about someone seeing the data), then deploying your project with a custom loader is the way to go such as signet ( http://jamercee.github.io/signet / )。 將您的數據 blob 放入您的腳本中,它的值將被合並到它的 sha1 計算中。 如果有人要修改數據塊,加載程序會檢測到它是篡改的,並拒絕運行它。

也許你應該看看 CouchDB? 您基本上將數據存儲在 JSON 作為文檔。 它完美地工作。

http://code.google.com/p/couchdb-python/

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

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

data = {}

然后你可以這樣寫:

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

然后在另一個文件中讀取相同的值,如下所示:

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

存儲模塊中的數據將可供程序中的所有其他模塊訪問,但在程序退出時將被擦除。 如果不修改程序,用戶將無法觸摸它。 如果您需要更多與數據庫相關的內容,sqlite 允許您在 memory 中創建數據庫,只要程序正在運行,該數據庫僅保留在 memory 中

快速瀏覽一下這個這個 這些庫可能會有所幫助。 我不得不指出,一個有經驗的計算機軟件工程師可能會找到一種方法來繞過任何實施的數據隱藏方法,只需讀取您的源文件,解構您的編譯代碼,甚至可能是可行的蠻力解密(我可能是錯誤的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM