我需要帮助在python程序中存储数据。我不希望用户能够触摸数据。我看了很多泡菜,但很多帖子说这是“不安全”。
答案 0 :(得分:3)
您无法阻止用户触摸数据。如果他们在他们的系统上运行程序,他们可以在将它们写入磁盘后随意执行任何操作。您可以通过各种方式对数据进行模糊处理,甚至可能对其进行加密,但如果确定的话,它们仍然可以最终获得。如果您需要证明,请查看有史以来发明的每个复制保护/ DRM系统的绝对故障。有些解决方案“足够好”但是,如果不知道您实际想要解决的问题,那么就没有好的方法可以开始提供真实的选项。
...如果你可以相信你的数据,那么Pickle很棒。如果您可以合理地确定您的程序将文件写入磁盘并且恶意程序没有主动定位您的应用程序,那么它是安全的。我永远不会相信通过网络发送的pickle,但是反序列化可能会在反序列化期间执行任意命令。
答案 1 :(得分:2)
可以尝试阻止程序在被篡改时停止运行,例如将其(md5)哈希值与已知的良好值进行比较。查看Chrome操作系统项目,了解一个系统示例,该系统大致相同。
您可以尝试阻止用户理解写入磁盘的程序和数据,例如加密并隐藏解密子例程,或者混淆源代码。
但是你不能阻止一个坚定的用户破坏你的程序及其数据或中断它。一旦你的程序播出,我认为它的内存段受到其他进程的访问保护。但是,这不会阻止用户在运行之前进行反编译并尝试理解您的程序。
旨在保护软件免受其所有者侵害的安全性必然依赖于聪明的黑客攻击。记住,你的聪明黑客受到其他聪明黑客的规避。 Python被设计为一种开放式语言,如果你打算设计“偷偷摸摸”的程序,你可能会更好地使用其他语言。
答案 2 :(得分:1)
如果用户将在他的机器上运行程序,则无法隐藏数据。
运行程序的用户可以访问程序可以访问的所有内容,只需要知道在哪里查看。
如果您正在与最终用户打交道,那么只需加密数据并在使用之前在最后一点解密。请记住,在某些时候,数据必须在内存中解密,然后用户才能看到它。
答案 3 :(得分:0)
也许你应该看看CouchDB?您基本上将数据存储在JSON中作为文档。它完美地运作。
答案 4 :(得分:0)
你的意思是在内存中,而不是在磁盘上?将数据存储在内存中并使其在整个程序中易于访问的一个非常简单的解决方案是在程序的根目录中创建一个包含字典的python文件。
例如,py / storage.py将包含:
data = {}
然后你可以这样写:
import storage
storage.data['foo'] = 'bar'
然后在另一个文件中读取相同的值,如下所示:
import storage
foo = storage.data['foo']
存储模块中的数据可供程序中的所有其他模块访问,但在程序退出时将被删除。如果不修改程序,用户将无法触摸它。如果你需要更多与数据库相关的东西,sqlite允许你在内存中创建只在程序运行时才留在内存中的数据库
答案 5 :(得分:0)
快速查看this和this。这些图书馆可能会有所帮助。我不得不注意到,经验丰富的计算机软件工程师可能会找到一种方法来绕过任何已实现的数据隐藏方法,只需阅读源文件,解构编译代码,甚至可能进行可行的暴力解密(我可能是错)。
答案 6 :(得分:0)
如果您需要保护数据不被篡改(但您并不担心有人看到数据),那么使用自定义加载程序部署项目就是signet(http://jamercee.github.io/signet/)的方法。将您的数据blob放在脚本中,它的值将包含在它的sha1计算中。如果有人要修改数据blob,加载器会将其检测为篡改,并拒绝运行它。