gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:20:56 24 4
gpt4 key购买 nike

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

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

现在这里出现两个问题 -

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

为了解决第一个问题,我已经使用了AES加密,而且效果很好。然而,第二个问题仍然存在。

So in a nut shell, How can I prevent my SQLite DB to get modified except from the Password Manager itself?

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

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

最佳答案

限制用户访问

只有操作系统可以防止未经授权的人访问文件。将数据库放在一个文件夹中,只有当前用户可以访问,每个用户都有一个单独的数据库。

加密

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

The SQLite Encryption Extension (SEE) is an add-on to the public domain version of SQLite that allows an application to read and write encrypted database files.

也看看问题SQLite with encryption/password protection .

攻击

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

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

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

备份

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

结论

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

关于java - 防止在 SQLite 中从外部源修改数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40846002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com