防止在SQLite中从外部源修改数据

Sah*_*rsh 8 java sql database windows sqlite

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

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

现在这里出现了两个问题 -

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

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

所以在一个坚果shell中,我如何防止我的SQLite数据库被修改,除了密码管理器本身?

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

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

Chr*_*fer 3

限制用户访问

只有操作系统才能保护文件免遭未经授权的人员访问。将数据库放入一个文件夹中,该文件夹只能由当前用户访问,并且每个用户都有一个单独的数据库。

加密

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

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

另请参阅问题SQLite with encryption/password Protection

攻击

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

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

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

备份

如果您确实想确保数据不被修改,则需要在不同的计算机上保留备份,以最大程度地减少某人访问所有数据的可能性。例如,您可以将数据库文件上传到云服务。然后对文件进行签名,以便您可以查看文件是否受到威胁,如果是,则回退到另一个版本。

结论

您的密码管理器对于离线工具来说已经足够好了。如果您想提高数据完整性,则必须将数据传输到其他机器。