【问题标题】:Preventing data modification from outer source in SQLite防止在 SQLite 中从外部源修改数据
【发布时间】:2016-11-28 13:54:18
【问题描述】:

我最近使用 Java 为我在 OOP 中的大学项目创建了一个密码管理器。为了处理数据库,我选择了 SQLite,因为在小型项目中使用 MySQL 或 SQL 服务器变得很忙。虽然我已经完成了提交,但我正在考虑是否可以对项目做进一步的改进。

我观察到的最大缺点是,如果有人设法在系统中找到数据库的位置(这太容易了),打开数据库将非常简单。

现在出现了两个问题 -

  1. 用户的密码列表将可见
  2. 任何人都可以使用 SQLite 管理器修改数据。

为了解决第一个问题,我已经使用了 AES 加密,它工作得很好。但是,第二个问题仍然存在。

简而言之,除了密码管理器本身之外,如何防止我的 SQLite DB 被修改?

请注意,我的应用程序只是家用 PC 上使用的离线密码管理器。因此,您可以相应地考虑威胁级别。此外,密码管理器本身必须修改数据库内容,因此分配权限不应阻止应用程序这样做。

注意:我想知道我们是否可以利用 SQLite 的限制,即一次只能建立一个写入数据的连接。使用它,入侵者将无法修改它。但是,我不确定它是如何实现的。

【问题讨论】:

  • 只是chmod 数据库只对你可读。其他用户有自己的帐户,对吧? (你也应该使用密码散列函数对密码进行散列)
  • 如果有人掌握了物理数据库文件,没有什么可以阻止他们查看数据或更改数据(对于任何基于服务器的 DBMS 也是如此 - 但是通常更难访问数据库上的文件)数据库服务器)。甚至单个连接“限制”都不会阻止这种情况 - 关闭您的应用程序会使它变得无用。
  • " 我想知道我们是否可以使用 SQLite 的限制,即一次只能建立一个连接。" 这是不正确的。一次只能有一个连接锁定数据库进行写入,但可以存在多个连接。
  • @ColonelThirtyTwo 感谢您的指正。
  • 您实际上无法防御具有管理员权限的入侵者。他们可以设置断点并转储程序的 RAM,以便从中获取几乎任何他们想要的信息。

标签: java sql database windows sqlite


【解决方案1】:

限制用户访问

只有操作系统可以保护文件免受未经授权的人员的访问。把数据库放到一个文件夹里,只有当前用户可以访问,每个用户都有一个单独的数据库。

加密

您已经对密码进行了加密,这很好。如果你想加密整个数据库,你可以看看SQLite Encryption Extension

SQLite 加密扩展 (SEE) 是 SQLite 公共域版本的附加组件,允许应用程序读取和写入加密的数据库文件。

也可以看看SQLite with encryption/password protection这个问题。

攻击

如果有人可以访问数据库文件,实际会发生什么?

如果数据库得到适当的保护,攻击者就无法获得纯密码(至少在合理的时间内)。在最坏的情况下,密码会被另一个密码替换,但除了您使用了错误的密码并可能重置密码之外,这将一事无成。因此,最坏的情况是您会丢失已保存的密码。

您无法采取任何措施来防止单台计算机上的数据丢失。例如硬盘有时会停止工作,有人可能会窃取整台 PC、格式化硬盘等。

备份

如果您真的想确保数据不被修改,您需要在不同的机器上保留备份,以尽量减少有人可以访问所有这些数据的可能性。例如,您可以将数据库文件上传到云服务。然后对文件进行签名,这样您就可以查看文件是否被泄露,如果是,则回退到另一个版本。

结论

您的密码管理器足以作为离线工具使用。如果您想提高数据完整性,您必须将数据传输到其他机器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2014-04-26
    • 2013-03-12
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多