代码之家  ›  专栏  ›  技术社区  ›  filip-fku

保护用户PC上的应用程序数据库访问

  •  0
  • filip-fku  · 技术社区  · 15 年前

    问候语!

    我需要使用正在开发的应用程序部署一个紧凑的数据库。数据库充当应用程序已经看到的数据的缓存,该数据永远不会更改,因此缓存的值永远不会过时。我选择了sqlite,我用c写。

    我想保护数据库文件,这样用户就不能轻松地访问或编辑这些文件—只能访问我的应用程序。现在,一种选择是使用密码保护,这是很好的,除了使用像Reflector这样的工具,人们可以很容易地查看源的接近原始版本,并检查每个文件生成的密码/它们是如何生成的,然后复制它。

    有没有关于如何达到这个结果的建议或者接近的建议?过去人们做过类似的事情吗?

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  4
  •   Mehrdad Afshari    15 年前

    默默无闻的安全。

    如果你的应用可以解密它,那么你的用户也可以这样做。

    如果你想保证它的安全,你必须自己保管它。您最好将数据库存储在服务器上,并通过Web服务使其可用。在您自己的服务器上执行访问控制检查,以便应用程序只能访问必须查看的数据库部分。

        2
  •  1
  •   Caladain    15 年前

    我没有一个明确的答案给你(在发布部署期间混淆你的代码,让密码长得离谱),这是黄金法则:如果他们对可执行文件(替代机器/汽车/门)有物理访问权,如果他们想要(并且有技能),他们可以进入。

    你所能做的就是给他们带来困难。

        3
  •  0
  •   Dr. Wily's Apprentice    15 年前

    这个领域不是我的长处,但我可以建议您考虑一下您实际发送的数据,并确定是否有任何方法可以限制任何更敏感的数据从一开始就传输到客户机。

    如果您担心的是向客户机发送诸如ID号、帐号之类的信息,那么也许您可以将这些值转换成一个在您的应用程序之外没有意义的仅限于客户机的版本。您的服务器可以有一个表,其中包含实际值和仅客户端值之间的转换。

    假设您将此表存储在服务器的数据库中(而不是客户端数据库!)

    RealAccountNumber   ClientOnlyAccountNumber
    981723              ABC123
    129847              BCD234
    923857              CDE345
    ...
    

    因此,客户机只在clientOnlyAccountNumber列中看到帐号,当客户机向服务器发送请求,要求对帐户“abc123”执行操作时,服务器知道将其转换为帐号981723。