【问题标题】:Can I connect to database with another language我可以用另一种语言连接到数据库吗
【发布时间】:2021-05-03 09:39:00
【问题描述】:

您好,我有一个 C# WinForms 应用程序。我在 C# 上编写了基本方法。但我需要一个登录表单,它不安全,因为像 dotpeek 这样的应用程序可以检查源代码并破解它。我可以与用另一种语言(java、c、python 等)编写的另一个应用程序通信吗?我需要将输入数据从 WinForms C# 发送到另一个应用程序,然后它应该连接到数据库并检查登录是否成功,然后将值返回给 C# WinForms 应用程序。这可能吗,我该如何实现?我不想用另一种语言编写所有应用程序,因为 C# 有很好的方法来处理图像/像素和 gui 支持,而且内存使用量非常小。

【问题讨论】:

  • 您想使用另一种语言,因为您担心有人使用工具来检查正在运行的代码?你猜怎么着......所有语言都可能发生这种情况!
  • 这就是为什么您不应该在源代码中保存与安全相关的信息。事实上,几乎没有机会完全阻止任何人反编译您的程序,无论是用 Java、C# 还是 C++ 编写的,更不用说所有的脚本语言了。
  • 我想使用一个外部应用程序,因为我的数据库 ID、密码等在用 C# 编写时都是可见的,你为什么要否决这个问题?
  • 这里的关键不是关于语言,因为它们所有都有相同的“问题”。关键是不要在源代码中存储密码。反正我根本没有投票。
  • 例如,您可以使用 http 或 tcp/ip 传输与“任何”应用程序通信。其他应用程序也可以用 C# 编写。查看客户端-服务器模型

标签: c# database security communication between


【解决方案1】:

您的担忧并非毫无根据。 C#,或者就此而言,任何在 CLR 上运行的 .net 语言,比 C 或 C++ 之类的语言更容易检查。

话虽如此,没有应用程序是完全安全的,应用程序之间的通信也有其自身的问题。一个应用程序如何验证另一个应用程序?等等。您可以创建一个与数据库通信的 Web 服务(并使用 HTTP 或 WCF 与 Web 服务通信),这意味着您的应用程序无法直接访问数据库,但这只会保护数据库不受您的影响。应用程序,它仍然允许有人检查您的应用程序并使用网络服务,冒充您的应用程序。此外,您需要在某些网络托管服务上托管网络服务,然后您必须信任该服务不会检查您的应用程序...

您可以通过将密码等存储为字节数组来减少问题,但无论您做什么,我都不知道有什么方法可以完全保护您的应用程序。如果您的计算机上有恶意应用/参与者,他们可以检查您的应用。

至于您的问题本身 - 请查看 WCFnamed pipes (includes a simple example)

【讨论】:

    【解决方案2】:

    我明白你要表达的意思。 要承认的一件事是,您不能完全避免反编译应用程序。 C# 或 C++,任何东西都可以逆向工程。

    如果您仍然需要它,一个相对安全的方法是不要将检查应用程序放在客户端的机器上。创建 API 并将数据库托管在服务器上。 然后从您的 Windows 窗体应用程序向服务器发起一个 Http 请求。

    然后您就可以完全控制登录 API 和数据库。许多应用程序使用与此类似的 OAuth。另一个例子是应用程序使用在线 API 验证其许可证。

    如果您想进行设置,每月大约 10 美元即可获得 LightSail Windows 服务器。尝试探索

    【讨论】:

    • 这是唯一正确的答案。在客户端计算机上运行的应用程序不应直接连接到数据库。他们应该与在服务器上运行的 API 通信,并且该 API 可以代表用户连接到数据库。
    • @mason 也许是这样,但这并不能解决所有的安全问题。 (并不是说我知道这样做的方法。只是指出这一点。)来自网络主机的威胁,或任何危害网络服务的人,以及冒充应用程序以获取应用程序可以获得的任何信息的人(通过反编译应用程序) , OP 似乎很担心。 (除了这个答案没有回答实际问题之外。但我知道这里的许多人并不关心这个,“XY 问题”等等......)
    • 我们能做的就是让逆向工程变得更加困难。有一些方法可以混淆 exe 文件。它们会使反编译变得更加困难。另一种方法是将原始应用程序的校验和存储在 API 服务器上。然后在每个请求上,原始应用程序都需要在标头上发送它的校验和。重新编译反向工程代码与服务器上的原始版本校验和(如签名)不匹配,因此无法绑定端点,这只是我听说的另一种方法
    • @ispiro 当然,它不会解决所有安全问题,但是如果您想考虑系统安全,则绝对应该从客户端应用程序中删除直接数据库访问。客户端本身无法访问网络托管服务器,因此攻击者必须突破另一个(更难的)防御层。冒充应用程序来获取信息并不是什么大问题 - 因为 API 负责授权所有用户请求,以确保客户端不能做他们不应该做的任何事情。
    • 我可以通过托管 PHP 创建自己的 API
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多