2011-06-02 71 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,加载器会将其检测为篡改,并拒绝运行它。