如何在 Windows 窗体项目中安全地存储 SQL 信息?

How can I securely store SQL information in a Windows Form project?

提问人:Faruk Durak 提问时间:9/6/2023 更新时间:9/6/2023 访问量:47

问:

我找不到如何在 C# Windows 窗体应用程序中安全地存储 SQL 信息。

使用 .NET Reflector 等工具,代码可以以某种方式显示。

最准确、最可靠的方法是什么?

他们建议在 app.config 中将其加密。但是,解密代码必须存在于项目中。

因此,很容易看出它是如何加密的以及如何解密的。

C# Windows WinForms 安全性 SQLConnection

评论

0赞 Eldar 9/6/2023
如果它如此重要,则不应直接连接数据库。您可能需要有一个服务器应用程序。
1赞 Good Night Nerd Pride 9/6/2023
这取决于您计划如何分发应用程序以及数据库的托管位置。它是否可以从互联网上下载并且全世界都可以使用它?那么 AFAIK 是不可能的。但是,如果使用外部标识提供者(例如 Azure Active Directory),则可能是这样。它是内部部署的公司应用吗?然后,您可以使用用户身份并允许特定用户组访问数据库。您需要提供有关用例的更多详细信息,因为将凭据存储在应用程序内始终意味着以某种方式泄露它们。
0赞 Faruk Durak 9/6/2023
@GoodNightNerdPride 谢谢你的回答。这将是一个 SaaS 应用程序,因此任何会员都可以下载和使用它。来自任何国家和任何 IP 地址的数十万人都应该能够连接。我不能对 IP 地址或任何东西施加限制。我必须很好地隐藏SQL连接信息,或者我可以通过API连接,但我仍然必须隐藏一些东西。只要exe的代码是可见的,我就必须加密一些重要的信息,而不是展示我是如何加密的。
0赞 Faruk Durak 9/6/2023
@GoodNightNerdPride我曾研究过加密所有中间代码,但成本相当高。我找到了一个免费工具,它有不同的问题。即使加密代码也可能不是最终的解决方案:(
3赞 Charlieface 9/6/2023
在您无法控制的机器上完全隐藏信息是不可能的。你在浪费你的时间。

答:

0赞 YungDeiza 9/6/2023 #1

最简单的方法是创建服务器应用程序,并通过服务器应用程序路由 DB 访问。

有一些方法可以隐藏和加密应用程序中的敏感数据,例如,通过使用 .但是,敏感数据以明文形式存在,总会有一点,而这一点将是弱点。所有加密方法只会减少敏感数据以可读格式存在的时间。SecureString

因此,使用服务器应用程序充当应用程序和客户端应用程序之间的中介是最佳解决方案。正如 @Good Night Nerd Pride 所提到的,您的服务器应用程序还需要实现身份验证,以确保只有授权用户才能访问数据库。

评论

0赞 Faruk Durak 9/6/2023
谢谢你的回答。我将研究 SecureString。我也认为我应该使用 API,但我仍然需要在代码中保留一些变量以进行 API 连接。我得再以某种方式隐藏它们,不是吗?是否建议我使用 Web API (RESTful API)?
0赞 YungDeiza 9/6/2023
澄清一下,我提到更多的是为了阻止你走这条路。它只会使攻击者更难获取敏感日期,而不是阻止它。如果您真的必须走这条路,请确保使用某种 crendentials 存储来检索凭据,而不是硬编码的配置文件。SecureString
0赞 Faruk Durak 9/6/2023
在分配和读取 SecureString 变量时,我需要再次将连接信息添加到代码中。因此,可以看出我是如何创建和使用 SecureString 变量的。通过这样做,它们可以达到相同的值。我必须从某个地方读取我定义的值,没有人应该能够看到我读取的值。
0赞 YungDeiza 9/6/2023
因此,为什么我说你应该创建一个服务器应用程序,而不是使用SecureString