C# 我可以用另一种语言连接到数据库吗

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

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

您的担心并非毫无根据。C,或者,在CLR上运行的任何.NET语言,都比C语言或C++语言更容易被检查。 话虽如此,没有一个应用程序是完全安全的,应用程序之间的通信也有其自身的问题。一个应用程序如何验证另一个?等等。您可以创建一个与数据库通信的web服务(并使用HTTP或WCF与web服务通信),这意味着您的应用程序无法直接访问数据库,但这只会保护数据库不受您的应用程序的影响,它仍然允许有人检查您的应用程序并使用web服务,模拟你的应用程序。此外,您需要在某个web托管服务上托管该web服务,然后您必须信任该服务不会检查您的应用程序

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


至于你的问题本身——看看或。

我明白你想表达的意思。 需要承认的一点是,你无法完全避免应用程序的反编译。C或C++,不管什么都可以逆向工程。 如果您仍然需要它,一个相对安全的方法是不将检查应用程序放在客户端的机器上。创建API并将数据库托管在服务器上。 然后从Windows窗体应用程序向服务器发起一个Http请求

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


如果你想安装LightSail Windows服务器,每月大约10美元就可以买到。尝试探索

您想使用另一种语言,因为您担心有人使用工具检查正在运行的代码?猜猜看……所有语言都可能发生这种情况!这就是为什么不应该在源代码中保存与安全相关的信息。事实上,几乎没有任何机会完全阻止任何人来反编译你的程序,无论是写在爪哇,C语言还是C++,更不用说所有的脚本语言了。我想使用一个外部的应用程序,因为我的数据库ID、密码等在C语言中都是可见的。你为什么投票否决这个问题?这里的关键不是语言,因为他们都有相同的“问题”。关键不是在源代码中存储密码。Anway我根本没有投票。例如,您可以使用http或tcp/ip传输与“任何”应用程序通信。另一个应用程序也可以用C语言编写。请参阅客户机-服务器模型这是唯一正确的答案。客户端计算机上运行的应用不应直接连接到数据库。他们应该与在服务器上运行的API进行对话,该API可以代表用户连接到数据库。也许是这样,但这并不能解决所有的安全问题。(我不知道有什么方法可以做到这一点。我只是指出了这一点。)来自网络主机的威胁,或任何危害网络服务的人,以及有人冒充应用程序获取应用程序可以获取的任何信息(通过反编译应用程序),OP似乎对此感到担忧。(除此之外,这个答案并不能回答实际问题。但我知道这里的许多人并不关心这个问题,“XY问题”等等……)我们能做的就是让逆向工程更难。有几种方法可以混淆exe文件。它们将使反编译变得更加困难。另一种方法是将原始应用程序的校验和存储在API服务器上。然后,对于每个请求,原始应用程序都需要在标题上发送其校验和。在服务器上重新编译反向工程代码与原始版本的校验和(如签名)不匹配,因此无法在端点上绑定,这只是我听说的另一种方法off@ispiro当然,它不会解决所有的安全问题,但是,如果要考虑系统的安全性,从客户端应用程序中删除直接数据库访问绝对是应该做的事情。客户端本身没有访问web托管服务器的权限,因此攻击者必须突破另一个(更难的)防御层。模拟应用程序来获取信息并不是什么大问题,因为API负责授权所有用户请求,以确保客户端不能做任何不应该做的事情。我可以通过托管PHP来创建自己的API吗