-1

情况

应用程序一启动,我就解密所有存储的数据(使用 ARC4 加密)并将其存储在一个文件中。现在应用程序全屏运行,但如果用户最小化此窗口并查看他的文件管理器(nemo、资源管理器等),那么他/她将看到一个纯文本文件。这将导致所有数据受到损害,显然我不希望这种情况发生。关闭应用程序后,我会加密数据并使用纯文本文件删除os.remove并仅存储加密数据。我担心的是应用程序运行的时间。存储的数据是帐户信息(用户名、密码等)。

问题

那么有没有办法以某种方式隐藏这个纯文本文件,以便用户无法在他的文件管理器中看到它,但我可以从程序中访问它?

障碍:(

我无法更改程序的整个设计,因为我在截止日期前运行,而且它是一个大型应用程序,只会花费太多时间。帮我解决这个问题。

眼镜

我在 Linux Mint 机器上使用 Python 2.7。

4

3 回答 3

1

理想情况下,您会根据需要解密数据,使用它,然后在不再需要时将其从内存中清除,而无需将其写入磁盘。如果该设计更改太多,并且您可以让非技术用户更难访问您的所有敏感信息,请将其存储在内存中并接受任何足够关心的人都可以访问它。

如果做不到这一点,其他一些选项可以从更容易到更难访问数据:

  • 您可以隐藏文件,但如果用户打开显示隐藏文件或使用ls -l他们可以看到它。
  • 您可以读取保护文件,但用户可以更改文件的权限以读取它。
  • 您可以在使用后直接删除文件,但用户可以使用数据恢复工具读取文件(或在程序使用时读取文件)。
  • 您可以将文件发送到远程服务器并从那里读取它,而解密的数据永远不会接触用户的驱动器,但如果他们使用数据包嗅探器,他们可以读取数据。
  • 您可以将其单独保存在内存中,但如果操作系统将其分页或用户检查您的程序内存,他们可以读取数据。
于 2013-05-29T10:26:43.400 回答
1

将敏感数据存储在纯文本文件中是一个非常非常糟糕的主意。您真的应该只在需要时解密数据,并立即在程序中使用它,而无需将其写入文件。

但是,假设您已经知道这一点并且您只是想要一个快速修复来隐藏文件,那么您可以:

  • 使文件名以.- 例如. 开头.data。这将使文件隐藏在基于 Unix 的系统上。
  • 将文件放置在用户不太可能搜索的隐蔽位置,例如/tmp
  • 不要给文件一个明显的名称,例如passwords.txt,而是使用从散列函数或时间戳生成的名称 - 例如time.time(). 这将具有额外的好处,即每次运行程序时使您的文件名不同。
  • 您可以从文件中删除读取权限os.chmod(file, '022')
  • 程序关闭时删除文件,使用os.remove(file)

有办法绕过所有这些防御(甚至删除文件),它们只会使用户读取数据的任务变得更加困难。这根本不是真正的保护,依靠这样的技术来保护真实数据绝对不是一个好主意。

于 2013-05-29T10:28:51.143 回答
1

一种更安全的方法是使用内存映射文件而不是磁盘文件。如果加密数据的大小不是数百兆字节,那么您可以在内存中创建文件而不接触磁盘。看看StringIO模块。当然,这不是 100% 安全的,因为有办法查看 RAM 中存储的内容,并且操作系统可以将数据分页到基于磁盘的分页文件,但它仍然比普通的“受保护”好几个数量级磁盘上的文本物理文件。

于 2013-05-29T10:54:56.193 回答