繁体   English   中英

不使用数据库或 .xml 文件存储敏感数据的最佳方法

[英]Best approach for storing sensitive data without using a database or an .xml file

我正在 c# 中开发一个应用程序,它使用 .xml 文件来获取应用程序逻辑内部使用的信息。 启动新版本的应用程序时,会创建一个设置(使用 Inno Setup Compiler),并在成功安装该设置后,将 .xml 放在应用程序的安装文件中。 This.xml 文件包含大约 200 个对象,每个对象具有 4 个敏感数据属性。

我被要求启动该应用程序的客户版本,该版本的要求是删除对 this.xml 文件的访问或操作,因为它包含客户不应看到或操作的敏感数据。

我的高级工程师告诉我只需在源代码中实现列表中的信息,这样就可以删除 .xml 文件的使用,并且客户一旦安装了应用程序就无法操作此信息,因为它会隐藏在源代码,但这对我来说似乎效率很低,我需要更改很多关于在应用程序中使用 .xml 文件的逻辑才能使其工作。

  1. 有没有办法创建应用程序的设置并将此文件隐藏在设置文件中,以防止客户对其进行操作?

  2. 如果没有,您可以建议我采用什么方法? 或者我别无选择,只能以艰难的方式做到这一点?

如果您想让最终用户更难修改信息,同时仍保留不需要更改应用程序本身代码的单独配置文件,您可以对该文件签名并让应用程序验证签名。

最简单的方法是计算文件的 hash 和“秘密”值。 当然,它很难防篡改。 但最终,没有任何防篡改方法可以防止用户在他/她自己的计算机上操纵数据。 这只是关于你想做多难。

更好的方法是使用适当的证书进行签名。 应用程序将只知道公钥,并将使用它来验证使用私钥创建的签名,而私钥永远不会离开开发团队。

从理论上讲,如果您的程序可以获取数据,那么完全控制运行该程序的计算机的用户如果足够努力,也可以获取数据。 这意味着你可以让他们为难,但你不能让他们变得不可能。 因此,如果这就是您想要实现的目标,您需要非常清楚该方法的局限性。

你应该让它有多难? 好吧,如果这纯粹是一种商业风险,那么你应该让它变得足够困难,以至于获取数据的成本大于收益。 如果无法以这种方式衡量风险,例如,如果法律要求您保护数据,那么这还不够好。

在某些情况下,加密 XML 文件可能就足够了,并将解密密钥深埋在用不允许轻松反编译的语言编写的编译程序的逻辑中。 这可能比简单地将 XML 数据埋在编译程序中要好,这是您的高级工程师的建议。 但她的建议也可以。 将程序逻辑从读取外部文件更改为读取程序中的字符串常量确实不难。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM