保护用户 PC 上的应用程序数据库访问
Posted
技术标签:
【中文标题】保护用户 PC 上的应用程序数据库访问【英文标题】:Protecting app database access on user PC 【发布时间】:2010-06-29 21:03:51 【问题描述】:您好!
我需要使用我正在开发的应用程序部署一个紧凑型数据库。数据库充当应用程序已经看到的数据的缓存,并且该数据永远不会更改,因此缓存的值永远不会过时。我选择了 SQLite,并且使用 C# 编写。
我想保护数据库文件,以便用户无法轻松访问或编辑它们 - 仅保留对我的应用程序的访问权限。现在,一种选择是使用密码保护,这很好,除了使用 Reflector 等工具可以轻松查看接近原始版本的源代码并检查密码/每个文件生成密码的方式并复制它。
对于如何实现这个结果或类似的东西有什么建议吗?过去人们有没有做过这样的事情?
谢谢!
【问题讨论】:
【参考方案1】:默默无闻的安全性。
如果您的应用可以解密,那么您的用户也可以解密。
如果您想确保它的安全,您必须自己保管它。最好的办法是将数据库存储在服务器上并通过 Web 服务使其可用。在您自己的服务器上执行访问控制检查,以便应用程序只能访问它必须查看的数据库部分。
【讨论】:
+1 - 没错,如果没有别的,他们可以将它连接到调试器并查看进程的(未加密的)内存。 这就是我所担心的。虽然我原以为这样的事情足够普遍,以至于存在标准解决方案。将数据库放在服务器上是没有意义的,因为它充当来自用户的特定请求的缓存,并且存在纯粹是为了提高性能。 @filip-fku:如果有真正的解决方案,DRM 人员早就使用它了。这本质上是经典的a-hole 问题。 @Mehrad - 一个洞的问题,我喜欢它!感谢您提供此信息。【参考方案2】:按照黄金法则,我没有明确的答案(在发布部署期间混淆您的代码,使密码过长):如果他们可以物理访问可执行文件(替代机器/汽车/门),他们如果他们愿意(并且有技能)可以进入。
你所能做的就是让他们为难。
【讨论】:
【参考方案3】:这个领域不是我的强项,但我可以建议的一件事是考虑一下您实际发送的数据并确定是否有任何方法可以限制任何更敏感的数据被传输到客户端首先。
如果您担心向客户端发送 ID 号码和帐号等信息,那么也许您可以将这些值转换为在您的应用程序之外毫无意义的仅限客户端的版本。您的服务器可能有一个表,其中包含实际值和仅客户端值之间的转换。
假设您将此表存储在服务器的数据库中(而不是客户端数据库!)
RealAccountNumber ClientOnlyAccountNumber
981723 ABC123
129847 BCD234
923857 CDE345
...
因此,客户端只能在 ClientOnlyAccountNumber 列中看到帐号,并且当客户端向服务器发送请求以对帐户“ABC123”执行操作时,服务器知道将其转换为帐号 981723。
【讨论】:
另一个问题的好主意! :) 我所关心的只是阻止用户访问本地文件数据库。以上是关于保护用户 PC 上的应用程序数据库访问的主要内容,如果未能解决你的问题,请参考以下文章